Microsoft.VisualStudio.Utilities.Internal HttpWeb request wrapper Gets target Url Gets or sets used method (GET, HEAD, POST, PUT, DELETE, TRACE, or OPTIONS) Gets or sets timeout for response Gets or sets cache policy Gets or sets content type. For example, "application/x-www-form-urlencoded" Initializes a new instance of the class. Url Add HTTP headers. Headers to add Send request and get response back asynchronously. Response CodeContract is used for validate input parameters Requires that argument is not null type of argument Value string representation of the argument Requires that string is not empty or contains just whitespaces value string representation of the argument Requires that string is not null and not empty value string representation of the argument Requires that argument not null and not whitespace value string representation of the argument Requires that Guid is not empty Guid to validate string representation of the argument Several dictionary extension methods. Gets a value by the given key. key type value type dictionary key in the dictionary default if key doesn't exist in the dictionary. Add one dictionary content to the another dictionary type of the dictionary argument key type of the dictionary argument value target dictionary source dictionary whether we need to force update value Remove key from the ConcurrentDictionary type of the dictionary argument key type of the dictionary argument value dictionary key HttpWeb request wrapper interface. Gets target Url Gets or sets used method (GET, HEAD, POST, PUT, DELETE, TRACE, or OPTIONS) Gets or sets timeout for response Gets or sets cache policy Gets or sets content type. For example, "application/x-www-form-urlencoded" Add HTTP headers. Headers Send request and get response back asynchronously. Response Helper class to get information from the Registry Get int registry value from the HKLM root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key default value on error current value or null in case Get int registry value from the HKLM root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key\ if true, it uses the 64 bit registry, otherwise 32 bit is used default value on error current value or null in case Get registry key value from the HKLM root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key default value on error current value or null in case Get registry key value from the HKLM root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key if true, it uses the 64 bit registry, otherwise 32 bit is used default value on error current value or null in case Get registry key value from the HKCU root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key default value on error current value or null in case Sets a value in the registry from the HKCU root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key value to set true if set or false if error Sets a value in the registry from the HKLM root Registry Path to the registry key in the format key\subkey\subsubkey Variable name under the key value to set optional, if set to true, it uses the 64 bit registry, otherwise defaults to 32 bit true if set or false if error Get the names of all values under a key in the HKCU root Registry. Path to the registry key in the format key\subkey\subsubkey Array of value names or empty Get the names of all values under a key in the HKLM root Registry. Path to the registry key in the format key\subkey\subsubkey if true, it uses the 64 bit registry, otherwise 32 bit is used Array of value names or empty Get the names of all subkeys under a key in the HKCU root Registry. Path to the registry key in the format key\subkey\subsubkey Array of value names or empty Get the names of all subkeys under a key in the HKLM root Registry. Path to the registry key in the format key\subkey\subsubkey if true, it uses the 64 bit registry, otherwise 32 bit is used Array of value names or empty Determines if a key exists in the HKCU root Registry Path to the registry key in the format key\subkey\subsubkey True if key exists, false if it does not Determines if a key exists in the HKLM root Registry Path to the registry key in the format key\subkey\subsubkey if true, it uses the 64 bit registry, otherwise 32 bit is used True if key exists, false if it does not Deletes the specified registry key and all subkeys in the HKCU root Registry Path to the registry key in the format key\subkey\subsubkey True if removed, or false if error Deletes the specified registry key and all subkeys in the HKLM root Registry Path to the registry key in the format key\subkey\subsubkey if true, it uses the 64 bit registry, otherwise 32 bit is used True if removed, or false if error Deletes the specified registry value from a key in the HKCU root Registry Path to the registry key in the format key\subkey\subsubkey Variable name under the key True if removed, or false if error Deletes the specified registry value from a key in the HKLM root Registry Path to the registry key in the format key\subkey\subsubkey Variable name under the key if true, it uses the 64 bit registry, otherwise 32 bit is used True if removed, or false if error Determines the kind of a property in the HKCU root registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key current value kind True on success, false on failure Determines the kind of a property in the HKLM root registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key current value kind if true, it uses the 64 bit registry, otherwise 32 bit is used True on success, false on failure Sets a value in the registry from the HKCU root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key value to set Supported RegistryValueKind's are bool, int, long/ulong which will convert to DWord, DWord, and QWord true if set or false if error Possible error codes for response. No error occurs Null response was returned. Request was cancelled by timeout. Other web exception was thrown. HttpWeb response wrapper interface. Gets response error code. Gets response exception code. Gets response status code. Get response as a stream. Response stream Gets a value indicating whether the registry contains values at the given path Converts a windows registry path to a macos file path File based implementation of IRegistryTools that uses the FileBasedRegistry for Unix/MacOS. Machine level registry is not supported. Get the names of all subkeys under a key in the HKCU root Registry. Path to the registry key in the format key\subkey\subsubkey Array of value names or empty Class containing all PInvoke definitions we use in the Telemetry Library that are used on macOS. Contains a registry value that is serializable for the Mono compatible FileBasedRegistry Gets or sets the name of the value Gets or sets the type of the value Gets or sets the text of the value Gets or sets the collection of child strings for string[] values Gets the object value of the value that was deserialized Creates a RegistryValue instance from the given value with the given name The name of the RegistryValue The value assigned to the RegistryValue Returns a new RegistryValue instance Contains registry values that are serializable for the Mono compatible FileBasedRegistry Converts System.IO.FileAccess to Windows API FILE_ACCESS_FLAGS flags. Supports limited conversions. System.IO.FileAccess objects to convert. The flag representation of FILE_ACCESS_FLAGS conversion. If the conversion that is being requested doesn't exist, this will be thrown. Converts System.IO.FileShare to Windows API FILE_SHARE_MODE flags. Supports limited conversions. System.IO.FileShare object to convert. The flag representation of FILE_SHARE_MODE conversion. If the conversion that is being requested doesn't exist, this will be thrown. Object extensions methods Returns an enumeration that contains only the given value. type of value value itself INumerable type with only 1 value Return this enumeration in case it is not null. In case it is null return empty enumeration. type of the values enumeration result Determines which platform the process is running on. Returns true on Windows platform. Returns true on Mac OS platforms. Returns true on Linux platforms. Helper class to get information from the Registry Get int registry value from the HKLM root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key default value on error current value or null in case Get int registry value from the HKLM root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key if true, it uses the 64 bit registry, otherwise 32 bit is used default value on error current value or null in case Get registry key value from the HKLM root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key default value on error current value or null in case Get registry key value from the HKLM root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key if true, it uses the 64 bit registry, otherwise 32 bit is used default value on error current value or null in case Get registry key value from the HKCU root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key default value on error current value or null in case Determines the kind of a property in the HKCU root registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key current value kind True on success, false on failure Determines the kind of a property in the HKLM root registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key current value kind if true, it uses the 64 bit registry, otherwise 32 bit is used True on success, false on failure Get the names of all values under a key in the HKCU root Registry. Path to the registry key in the format key\subkey\subsubkey Array of value names or empty Get the names of all values under a key in the HKLM root Registry. Path to the registry key in the format key\subkey\subsubkey if true, it uses the 64 bit registry, otherwise 32 bit is used Array of value names or empty Get the names of all subkeys under a key in the HKCU root Registry. Path to the registry key in the format key\subkey\subsubkey Array of value names or empty Get the names of all subkeys under a key in the HKLM root Registry. Path to the registry key in the format key\subkey\subsubkey if true, it uses the 64 bit registry, otherwise 32 bit is used Array of value names or empty Determines if a key exists in the HKCU root Registry Path to the registry key in the format key\subkey\subsubkey True if key exists, false if it does not Determines if a key exists in the HKLM root Registry Path to the registry key in the format key\subkey\subsubkey if true, it uses the 64 bit registry, otherwise 32 bit is used True if key exists, false if it does not Sets a value in the registry from the HKCU root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key value to set true if set or false if error Sets a value in the registry from the HKCU root Registry. Path to the registry key in the format key\subkey\subsubkey Variable name under the key value to set RegistryValueKind type. Supported types are DWord, QWord true if set or false if error Sets a value in the registry from the HKLM root Registry Path to the registry key in the format key\subkey\subsubkey Variable name under the key value to set optional, if set to true, it uses the 64 bit registry, otherwise defaults to 32 bit true if set or false if error Deletes the specified registry key and all subkeys in the HKCU root Registry Path to the registry key in the format key\subkey\subsubkey True if removed, or false if error Deletes the specified registry key and all subkey sin the HKLM root Registry Path to the registry key in the format key\subkey\subsubkey if true, it uses the 64 bit registry, otherwise 32 bit is used True if removed, or false if error Deletes the specified registry value from a key in the HKCU root Registry Path to the registry key in the format key\subkey\subsubkey Variable name under the key True if removed, or false if error Deletes the specified registry value from a key in the HKLM root Registry Path to the registry key in the format key\subkey\subsubkey Variable name under the key if true, it uses the 64 bit registry, otherwise 32 bit is used True if removed, or false if error Get registry key settings int value. Root key entry Path to the registry key in the format key\subkey\subsubkey Variable name under the key default value on error current value or null in case Get registry value kind. Root key entry Path to the registry key in the format key\subkey\subsubkey Variable name under the key current value kind True if no error, otherwise false Get all values under a registry key. If none, an empty array is returned. Root key entry Path to the registry key in the format key\subkey\subsubkey current value or null in case Get all subkeys under a registry key. If none, an empty array is returned. Root key entry Path to the registry key in the format key\subkey\subsubkey current value or null in case Checks if registry key exists Root key entry Path to the registry key in the format key\subkey\subsubkey current value or null in case Set registry key settings value. Root key entry Path to the registry key in the format key\subkey\subsubkey Variable name under the key value to set >RegistryValueKind type. Supported types are DWord, QWord true if set or false if error Deletes registry subkey and removes all child subkeys. Root key entry Path to the registry key in the format key\subkey\subsubkey true if deleted or false if error Deletes registry value from the specified subkey. Root key entry Path to the registry key in the format key\subkey\subsubkey Variable name under the key true if deleted or false if error Collection of File and Directory utility functions that ensure the files and folders being interacted upon have no Windows reparse points on their paths and that the paths in code match the actual paths on disk. Reparse point injection is a known/common vector of security exploits. See here for more general information about them: https://docs.microsoft.com/en-us/windows/win32/fileio/reparse-points The goal of this set of functions is to get a Windows file handle, verify that it is in the expected path and then do all file operations with the same handle. It is NOT a safe pattern to verify the file and then perform any additional operations using the file path as an attacker can exploit the race between the check of the file and the file operation based on the file path. This class of attack is known as Time-of-Check/Time-of-Use (TOCTOU). To avoid this, this class will hold the file handle and perform all operations on the handle once it has been deemed to be in the correct location. Since all operations are based on the file handle, we know we're modifying the file that we verified to be correct. Throws UnauthorizedAccessException if the given SafeFileHandle's canonical path is not the same as expectedPath. SafeHandle to the file to check. Path to check the handle against. The path contains Windows Reparse Points or otherwise cannot be accessed. Throws UnauthorizedAccessException if the canonical path is not the same as expectedPath. Checks that the expectedPath is not a reparse point. Specifies the check to verify a directory versus a file. The given FileStream's canonical path is not the same as expectedPath. Deletes the specified file. If the file's canonical path contains Windows Reparse Points, UnauthorizedAccessException is thrown and nothing is deleted. Path to the file to delete. The path contains Windows Reparse Points or otherwise cannot be accessed. Moves a specified file to a new location, providing the option to specify a new file name. If the file's canonical path contains Windows Reparse Points, UnauthorizedAccessException is thrown. Full path to the file being moved. Full path to the new location that the file is being moved to. The path contains Windows Reparse Points or otherwise cannot be accessed. Creates a new file, writes the specified string to the file, and then closes the file. If the target file already exists, it is overwritten. If the file's canonical path contains Windows Reparse Points, UnauthorizedAccessException is thrown and nothing is written. Full path to the target file. Contents to write to the file. The path contains Windows Reparse Points or otherwise cannot be accessed. Creates or opens a file for writing UTF-8 encoded text. If opening an existing file, the file is truncated. If the file's canonical path contains Windows Reparse Points, UnauthorizedAccessException is thrown and nothing is written. Full path to the target file. A StreamWriter to the file being opened. Caller is responsible for disposing of the StreamWriter when operations are complete. The path contains Windows Reparse Points or otherwise cannot be accessed. Opens an existing file or creates a new file for writing. If the file's canonical path contains Windows Reparse Points, UnauthorizedAccessException is thrown. Full path to the target file. A file stream to the file being opened. Caller is responsible for disposing of the file stream when operations are complete. The path contains Windows Reparse Points or otherwise cannot be accessed. Opens an existing file for reading. If the file's canonical path contains Windows Reparse Points, UnauthorizedAccessException is thrown. Full path to the target file. A file stream to the file being opened. Caller is responsible for disposing of the file stream when operations are complete. The path contains Windows Reparse Points or otherwise cannot be accessed. Opens a System.IO.FileStream on the specified path, having the specified mode with read, write, or read/write access and the specified sharing option. If the file's canonical path contains Windows Reparse Points, UnauthorizedAccessException is thrown. OpenFile will pin the directory first before doing any file operations. If pinning the directory fails or the directory is a ReparsePoint, UnauthorizedAccessException will be thrown. Full path to the target file. FileMode of the operation. Supports Create, CreateNew, Open or OpenOrCreate. Requested FileAccess permissions. Refer to NativeFlagsEx for what flags are supported. Requested FileShare access. Refer to NativeFlagsEx for what flags are supported. A file stream to the file being opened. Caller is responsible for disposing of the file stream when operations are complete. The path contains Windows Reparse Points or otherwise cannot be accessed. Checks to see if a file can be deleted by setting FileAttribute = Normal. If unable to set attribute, then user does not have access rights Full path of file for attribute change Creates all directories and subdirectories in the specified path. If the directory's canonical path contains Windows Reparse Points, UnauthorizedAccessException is thrown. Full path to the target directory. DirectoryInfo The resulting directory contains Windows Reparse Points or otherwise cannot be accessed. Opens a SafeFileHandle to an existing file or directory and confirms that the resulting canonical path matches that of the given path. The resulting SafeFileHandle is IDisposable and can be used within using statements to ensure that subsequent file operations are writing to paths without reparse points. Expected path to pin. Whether it is a file or directory path. SafeFileHandle to the file/directory that was specified. The path contains Windows Reparse Points or otherwise cannot be accessed. Takes a handle on an existing file or directory to ensure that it cannot move. Full path to the target file or directory. Whether the request is on a directory or file. SafeFileHandle to the object referenced by fullPath. Failed to open the handle either because the file or directory did not exist or because the current user has no access. Get the full canonical path to a given SafeFileHandle, with every reparse point expanded. Handle to use to get the final path. The final resolved path of the handle. The current user has no access. Checks if the file system object represented by the SafeFileHandle has a canonical path that matches the given expectedPath. Handle of the file/directory to check. The expected path to verify the handle against. Whether the handle's path matches the path that is passed in. Sets the DeleteOnClose handle attribute on the given handle. File handle to set DeleteOnClose. If unable to set DeleteOnClose on the handle, the exception will contain the reason why. Rename a file by handle. Handle to the file that you want to rename. The target name that you want the file to be changed to. true, if the rename was successful. Combination of Create or Open File. Attempts to create the file first and if it fails, will attempt to open the file. Calls CreateNewFile and OpenExistingFiles. This is marked safe because the methods it calls will verify ReparsePoints. Caller needs to Pin and verify the parent directory prior to calling this method. Full path to the file to create or open. Requested FileAccess permissions. Refer to NativeFlagsEx for what flags are supported. Requested FileShare access. Refer to NativeFlagsEx for what flags are supported. A FileStream object pointing to the file that was created or opened. Caller is responsible for disposing of the file stream. If unable to create or open the file, this method will throw IOException. If the path contains reparse points, UnauthorizedAccessException is thrown. Creates a new file, verifies it isn't a reparse point. If it contains a reparse point, this method will set DeleteOnClose flag on the handle and dispose of the handle and then throw UnauthorizedAccessException. Caller needs to Pin and verify the parent directory prior to calling this method. Full path of file to create. Requested FileAccess permissions. Refer to NativeFlagsEx for what flags are supported. Requested FileShare access. Refer to NativeFlagsEx for what flags are supported. Handle to the newly created file. If the file handle is created in an unexpected location (has reparse points), this will be thrown. If creation fails for some other reason (like due to the file already existing), this will be thrown. Opens an existing file. This method will check if the opened file handle is the path that is specified. If it is not, UnauthorizedAccessException is thrown. Caller needs to Pin and verify the parent directory prior to calling this method. Full path of file to open. Requested FileAccess permissions. Refer to NativeFlagsEx for what flags are supported. Requested FileShare access. Refer to NativeFlagsEx for what flags are supported. A SafeFileHandle to the file that is opened. Caller is responsible for disposing the handle when operations are complete. If the file handle is opened in an unexpected location (has reparse points), this will be thrown. If file open fails for some other reason (like due to the file not existing), this will be thrown. Creates a directory and returns a SafeFileHandle. This method does NOT check for reparse points or if the handle is valid. Path of the directory to be created. SafeFileHandle to the directory that was created. Sets the FileAttributes of Normal on the specified file. If the file's canonical path contains Windows Reparse Points, UnauthorizedAccessException is thrown.' By placing the call within this method, it prevents the underlying Windows dll from being queried when on non-Windows machines. Full path to the target file. The path contains Windows Reparse Points or otherwise cannot be accessed. Create a stub to prevent the CreateFile method from trying to be loaded from kernel32 on non-Windows machines. Use this method instead of calling CreateFile. HttpWeb response wrapper with stream implementation. Gets or sets response error code. Gets or sets response exception code. Gets or sets response itself. Gets or sets response status code. Get response as a stream. Response stream Extend several strings methods Join string together using "separator" string as separator string array separator string new string Check whether string is null or contains whitespaces only string to validate result of operation Task extensions Swallow exceptions for event handlers. http://theburningmonk.com/2012/10/c-beware-of-async-void-in-your-code/ We need to read an Exception to prevent throwing an Exception for .NET 4.0 and below. See http://stackoverflow.com/questions/25691114/where-does-an-async-task-throw-exception-if-it-is-not-awaited Task to swallow exception for A pointer to a constant character string. A pointer to the first character in the string. The content should be considered readonly, as it was typed as constant in the SDK. Gets the number of characters up to the first null character (exclusive). Returns a with a copy of this character array. A , or if is . Returns a span of the characters in this string. Returns a span of the characters in this string. Contains information that the GetFileInformationByHandle function retrieves. The identifier that is stored in the nFileIndexHigh and nFileIndexLow members is called the file ID. Support for file IDs is file system-specific. File IDs are not guaranteed to be unique over time, because file systems are free to reuse them. In some cases, the file ID for a file can change over time. In the FAT file system, the file ID is generated from the first cluster of the containing directory and the byte offset within the directory of the entry for the file. Some defragmentation products change this byte offset. (Windows in-box defragmentation does not.) Thus, a FAT file ID can change over time. Renaming a file in the FAT file system can also change the file ID, but only if the new file name is longer than the old one. In the NTFS file system, a file keeps the same file ID until it is deleted. You can replace one file with another file without changing the file ID by using the ReplaceFile function. However, the file ID of the replacement file, not the replaced file, is retained as the file ID of the resulting file. Not all file systems can record creation and last access time, and not all file systems record them in the same manner. For example, on a Windows FAT file system, create time has a resolution of 10 milliseconds, write time has a resolution of 2 seconds, and access time has a resolution of 1 day (the access date). On the NTFS file system, access time has a resolution of 1 hour. For more information, see File Times. Read more on docs.microsoft.com. The file attributes. For possible values and their descriptions, see File Attribute Constants. Read more on docs.microsoft.com. A FILETIME structure that specifies when a file or directory is created. If the underlying file system does not support creation time, this member is zero (0). Read more on docs.microsoft.com. A FILETIME structure. For a file, the structure specifies the last time that a file is read from or written to. For a directory, the structure specifies when the directory is created. For both files and directories, the specified date is correct, but the time of day is always set to midnight. If the underlying file system does not support the last access time, this member is zero (0). Read more on docs.microsoft.com. A FILETIME structure. For a file, the structure specifies the last time that a file is written to. For a directory, the structure specifies when the directory is created. If the underlying file system does not support the last write time, this member is zero (0). Read more on docs.microsoft.com. The serial number of the volume that contains a file. The high-order part of the file size. The low-order part of the file size. The number of links to this file. For the FAT file system this member is always 1. For the NTFS file system, it can be more than 1. Read more on docs.microsoft.com. The high-order part of a unique identifier that is associated with a file. For more information, see nFileIndexLow. Read more on docs.microsoft.com. The low-order part of a unique identifier that is associated with a file. The identifier (low and high parts) and the volume serial number uniquely identify a file on a single computer. To determine whether two open handles represent the same file, combine the identifier and the volume serial number for each file and compare them. The ReFS file system, introduced with Windows Server 2012, includes 128-bit file identifiers. To retrieve the 128-bit file identifier use the GetFileInformationByHandleEx function with FileIdInfo to retrieve the FILE_ID_INFO structure. The 64-bit identifier in this structure is not guaranteed to be unique on ReFS. Read more on docs.microsoft.com. Contains the basic information for a file. Used for file handles. Learn more about this API from docs.microsoft.com. The time the file was created in FILETIME format, which is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC). Read more on docs.microsoft.com. The time the file was last accessed in FILETIME format. Read more on docs.microsoft.com. The time the file was last written to in FILETIME format. Read more on docs.microsoft.com. The time the file was changed in FILETIME format. Read more on docs.microsoft.com. The file attributes. For a list of attributes, see File Attribute Constants. If this is set to 0 in a FILE_BASIC_INFO structure passed to SetFileInformationByHandle then none of the attributes are changed. Read more on docs.microsoft.com. Indicates whether a file should be deleted. Used for any handles. Learn more about this API from docs.microsoft.com. Identifies the type of file information that GetFileInformationByHandleEx should retrieve or SetFileInformationByHandle should set. As noted in the preceding section, some file information classes are valid only for use with GetFileInformationByHandleEx. Others are valid only for use with SetFileInformationByHandle. Where neither function is mentioned, the information class is valid with both functions. Read more on docs.microsoft.com. Minimal information for the file should be retrieved or set. Used for file handles. See FILE_BASIC_INFO. Read more on docs.microsoft.com. Extended information for the file should be retrieved. Used for file handles. Use only when calling GetFileInformationByHandleEx. See FILE_STANDARD_INFO. Read more on docs.microsoft.com. The file name should be retrieved. Used for any handles. Use only when calling GetFileInformationByHandleEx. See FILE_NAME_INFO. Read more on docs.microsoft.com. The file name should be changed. Used for file handles. Use only when calling SetFileInformationByHandle. See FILE_RENAME_INFO. Read more on docs.microsoft.com. The file should be deleted. Used for any handles. Use only when calling SetFileInformationByHandle. See FILE_DISPOSITION_INFO. Read more on docs.microsoft.com. The file allocation information should be changed. Used for file handles. Use only when calling SetFileInformationByHandle. See FILE ALLOCATION INFO. Read more on docs.microsoft.com. The end of the file should be set. Use only when calling SetFileInformationByHandle. See FILE_END_OF_FILE_INFO. Read more on docs.microsoft.com. File stream information for the specified file should be retrieved. Used for any handles. Use only when calling GetFileInformationByHandleEx. See FILE_STREAM_INFO. Read more on docs.microsoft.com. File compression information should be retrieved. Used for any handles. Use only when calling GetFileInformationByHandleEx. See FILE_COMPRESSION_INFO. Read more on docs.microsoft.com. File attribute information should be retrieved. Used for any handles. Use only when calling GetFileInformationByHandleEx. See FILE_ATTRIBUTE_TAG_INFO. Read more on docs.microsoft.com. Files in the specified directory should be retrieved. Used for directory handles. Use only when calling GetFileInformationByHandleEx. The number of files returned for each call to GetFileInformationByHandleEx depends on the size of the buffer that is passed to the function. Any subsequent calls to GetFileInformationByHandleEx on the same handle will resume the enumeration operation after the last file is returned. See FILE_ID_BOTH_DIR_INFO. Read more on docs.microsoft.com. Identical to FileIdBothDirectoryInfo, but forces the enumeration operation to start again from the beginning. See FILE_ID_BOTH_DIR_INFO. Read more on docs.microsoft.com. Priority hint information should be set. Use only when calling SetFileInformationByHandle. See FILE_IO_PRIORITY_HINT_INFO. Read more on docs.microsoft.com. File remote protocol information should be retrieved. Use for any handles. Use only when calling GetFileInformationByHandleEx. See FILE_REMOTE_PROTOCOL_INFO. Read more on docs.microsoft.com. Files in the specified directory should be retrieved. Used for directory handles. Use only when calling GetFileInformationByHandleEx. See FILE_FULL_DIR_INFO. Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP:  This value is not supported before Windows 8 and Windows Server 2012 Read more on docs.microsoft.com. Identical to FileFullDirectoryInfo, but forces the enumeration operation to start again from the beginning. Use only when calling GetFileInformationByHandleEx. See FILE_FULL_DIR_INFO. Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP:  This value is not supported before Windows 8 and Windows Server 2012 Read more on docs.microsoft.com. File storage information should be retrieved. Use for any handles. Use only when calling GetFileInformationByHandleEx. See FILE_STORAGE_INFO. Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP:  This value is not supported before Windows 8 and Windows Server 2012 Read more on docs.microsoft.com. File alignment information should be retrieved. Use for any handles. Use only when calling GetFileInformationByHandleEx. See FILE_ALIGNMENT_INFO. Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP:  This value is not supported before Windows 8 and Windows Server 2012 Read more on docs.microsoft.com. File information should be retrieved. Use for any handles. Use only when calling GetFileInformationByHandleEx. See FILE_ID_INFO. Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP:  This value is not supported before Windows 8 and Windows Server 2012 Read more on docs.microsoft.com. Files in the specified directory should be retrieved. Used for directory handles. Use only when calling GetFileInformationByHandleEx. See FILE_ID_EXTD_DIR_INFO. Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP:  This value is not supported before Windows 8 and Windows Server 2012 Read more on docs.microsoft.com. Identical to FileIdExtdDirectoryInfo, but forces the enumeration operation to start again from the beginning. Use only when calling GetFileInformationByHandleEx. See FILE_ID_EXTD_DIR_INFO. Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP:  This value is not supported before Windows 8 and Windows Server 2012 Read more on docs.microsoft.com. This value is used for validation. Supported values are less than this value. Contains the name to which the file should be renamed. Learn more about this API from docs.microsoft.com. A handle to the root directory in which the file to be renamed is located. The size of FileName in bytes. The new file name. Always 1. Copies the fixed array to a new string up to the specified length regardless of whether there are null terminating characters. Thrown when is less than 0 or greater than . Copies the fixed array to a new string, stopping before the first null terminator character or at the end of the fixed array (whichever is shorter). Contains extern methods from "Kernel32.dll". Closes an open object handle. A valid handle to an open object. If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError. If the application is running under a debugger, the function will throw an exception if it receives either a handle value that is not valid or a pseudo-handle value. This can happen if you close a handle twice, or if you call CloseHandle on a handle returned by the FindFirstFile function instead of calling the FindClose function. Learn more about this API from docs.microsoft.com. Creates or opens a file or I/O device. The most commonly used I/O devices are as follows:\_file, file stream, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. The name of the file or device to be created or opened. You may use either forward slashes (/) or backslashes (\\) in this name. In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, use this Unicode version of the function and prepend "\\\\?\\" to the path. For more information, see Naming Files, Paths, and Namespaces. For information on special device names, see Defining an MS-DOS Device Name. To create a file stream, specify the name of the file, a colon, and then the name of the stream. For more information, see File Streams.
Tip Starting with Windows 10, version 1607, for the unicode version of this function (CreateFileW), you can opt-in to remove the MAX_PATH limitation without prepending "\\?\". See the "Maximum Path Length Limitation" section of Naming Files, Paths, and Namespaces for details.
Read more on docs.microsoft.com. The requested access to the file or device, which can be summarized as read, write, both or neither zero). The most commonly used values are GENERIC_READ, GENERIC_WRITE, or both (GENERIC_READ | GENERIC_WRITE). For more information, see Generic Access Rights, File Security and Access Rights, File Access Rights Constants, and ACCESS_MASK. If this parameter is zero, the application can query certain metadata such as file, directory, or device attributes without accessing that file or device, even if GENERIC_READ access would have been denied. You cannot request an access mode that conflicts with the sharing mode that is specified by the dwShareMode parameter in an open request that already has an open handle. For more information, see the Remarks section of this topic and Creating and Opening Files. Read more on docs.microsoft.com. The requested sharing mode of the file or device, which can be read, write, both, delete, all of these, or none (refer to the following table). Access requests to attributes or extended attributes are not affected by this flag. If this parameter is zero and CreateFile succeeds, the file or device cannot be shared and cannot be opened again until the handle to the file or device is closed. For more information, see the Remarks section. You cannot request a sharing mode that conflicts with the access mode that is specified in an existing request that has an open handle. CreateFile would fail and the GetLastError function would return ERROR_SHARING_VIOLATION. To enable a process to share a file or device while another process has the file or device open, use a Read more on docs.microsoft.com. A pointer to a SECURITY_ATTRIBUTES structure that contains two separate but related data members: an optional security descriptor, and a Boolean value that determines whether the returned handle can be inherited by child processes. This parameter can be NULL. If this parameter is NULL, the handle returned by CreateFile cannot be inherited by any child processes the application may create and the file or device associated with the returned handle gets a default security descriptor. The lpSecurityDescriptor member of the structure specifies a SECURITY_DESCRIPTOR for a file or device. If this member is NULL, the file or device associated with the returned handle is assigned a default security descriptor. CreateFile ignores the lpSecurityDescriptor member when opening an existing file or device, but continues to use the bInheritHandle member. The bInheritHandlemember of the structure specifies whether the returned handle can be inherited. For more information, see the Remarks section. Read more on docs.microsoft.com. An action to take on a file or device that exists or does not exist. For devices other than files, this parameter is usually set to OPEN_EXISTING. For more information, see the Remarks section. Read more on docs.microsoft.com. The file or device attributes and flags, FILE_ATTRIBUTE_NORMAL being the most common default value for files. This parameter can include any combination of the available file attributes (FILE_ATTRIBUTE_*). All other file attributes override FILE_ATTRIBUTE_NORMAL. This parameter can also contain combinations of flags (FILE_FLAG_*) for control of file or device caching behavior, access modes, and other special-purpose flags. These combine with any FILE_ATTRIBUTE_* values. This parameter can also contain Security Quality of Service (SQOS) information by specifying the SECURITY_SQOS_PRESENT flag. Additional SQOS-related flags information is presented in the table following the attributes and flags tables.
Note When CreateFile opens an existing file, it generally combines the file flags with the file attributes of the existing file, and ignores any file attributes supplied as part of dwFlagsAndAttributes. Special cases are detailed in Creating and Opening Files.
Some of the following file attributes and flags may only apply to files and not necessarily all other types of devices that CreateFile can open. For additional information, see the Remarks section of this topic and Creating and Opening Files. For more advanced access to file attributes, see SetFileAttributes. For a complete list of all file attributes with their values and descriptions, see File Attribute Constants.
This doc was truncated. Read more on docs.microsoft.com. A valid handle to a template file with the GENERIC_READ access right. The template file supplies file attributes and extended attributes for the file that is being created. This parameter can be NULL. When opening an existing file, CreateFile ignores this parameter. When opening a new encrypted file, the file inherits the discretionary access control list from its parent directory. For additional information, see File Encryption. Read more on docs.microsoft.com. If the function succeeds, the return value is an open handle to the specified file, device, named pipe, or mail slot. If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call GetLastError. Learn more about this API from docs.microsoft.com.
Establishes a hard link between an existing file and a new file. The name of the new file. This parameter may include the path but cannot specify the name of a directory. In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\\\?\\" to the path. For more information, see Naming a File. If you pass a name longer than MAX_PATH characters to the ANSI version of this function or to the Unicode version of this function without prepending "\\\\?\\" to the path, the function returns ERROR_PATH_NOT_FOUND.
Tip  Starting with Windows 10, version 1607, for the unicode version of this function (CreateHardLinkW), you can opt-in to remove the MAX_PATH limitation without prepending "\\?\". See the "Maximum Path Length Limitation" section of Naming Files, Paths, and Namespaces for details.
 
Read more on docs.microsoft.com. The name of the existing file. This parameter may include the path cannot specify the name of a directory. In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\\\?\\" to the path. For more information, see Naming a File. If you pass a name longer than MAX_PATH characters to the ANSI version of this function or to the Unicode version of this function without prepending "\\\\?\\" to the path, the function returns ERROR_PATH_NOT_FOUND.
Tip  Starting with Windows 10, version 1607, for the unicode version of this function (CreateHardLinkW), you can opt-in to remove the MAX_PATH limitation without prepending "\\?\". See the "Maximum Path Length Limitation" section of Naming Files, Paths, and Namespaces for details.
 
Read more on docs.microsoft.com. Reserved; must be NULL. If the function succeeds, the return value is nonzero. If the function fails, the return value is zero (0). To get extended error information, call GetLastError. The maximum number of hard links that can be created with this function is 1023 per file. If more than 1023 links are created for a file, an error results. If you pass a name longer than MAX_PATH characters to the *lpFileName* or *lpExistingFileName* parameter of the ANSI version of this function or to the Unicode version of this function without prepending "\\\\?\\" to the path, the function returns ERROR_PATH_NOT_FOUND. Learn more about this API from docs.microsoft.com.
Creates a symbolic link. The symbolic link to be created. This parameter may include the path. In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. For more information, see Naming a File.
Tip  Starting with Windows 10, version 1607, for the unicode version of this function (CreateSymbolicLinkW), you can opt-in to remove the MAX_PATH limitation without prepending "\\?\". See the "Maximum Path Length Limitation" section of Naming Files, Paths, and Namespaces for details.
 
Read more on docs.microsoft.com. The name of the target for the symbolic link to be created. If lpTargetFileName has a device name associated with it, the link is treated as an absolute link; otherwise, the link is treated as a relative link. This parameter may include the path. In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. For more information, see Naming a File.
Tip  Starting with Windows 10, version 1607, for the unicode version of this function (CreateSymbolicLinkW), you can opt-in to remove the MAX_PATH limitation without prepending "\\?\". See the "Maximum Path Length Limitation" section of Naming Files, Paths, and Namespaces for details.
 
Read more on docs.microsoft.com. Indicates whether the link target, lpTargetFileName, is a directory. This doc was truncated. Read more on docs.microsoft.com. If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError. Learn more about this API from docs.microsoft.com.
Retrieves file information for the specified file. A handle to the file that contains the information to be retrieved. This handle should not be a pipe handle. Read more on docs.microsoft.com. A pointer to a BY_HANDLE_FILE_INFORMATION structure that receives the file information. Read more on docs.microsoft.com. If the function succeeds, the return value is nonzero and file information data is contained in the buffer pointed to by the lpFileInformation parameter. If the function fails, the return value is zero. To get extended error information, call GetLastError. Learn more about this API from docs.microsoft.com. Retrieves the final path for the specified file. A handle to a file or directory. A pointer to a buffer that receives the path of hFile. The size of lpszFilePath, in TCHARs. This value must include a NULL termination character. If the function succeeds, the return value is the length of the string received by lpszFilePath, in TCHARs. This value does not include the size of the terminating null character. Windows Server 2008 and Windows Vista:  For the ANSI version of this function, GetFinalPathNameByHandleA, the return value includes the size of the terminating null character. If the function fails because lpszFilePath is too small to hold the string plus the terminating null character, the return value is the required buffer size, in TCHARs. This value includes the size of the terminating null character. If the function fails for any other reason, the return value is zero. To get extended error information, call GetLastError. This doc was truncated. Learn more about this API from docs.microsoft.com. Reopens the specified file system object with different access rights, sharing mode, and flags. A handle to the object to be reopened. The object must have been created by the CreateFile function. Read more on docs.microsoft.com. The required access to the object. For a list of values, see File Security and Access Rights. You cannot request an access mode that conflicts with the sharing mode specified in a previous open request whose handle is still open. If this parameter is zero (0), the application can query device attributes without accessing the device. This is useful if an application wants to determine the size of a floppy disk drive and the formats it supports without requiring a floppy in the drive. Read more on docs.microsoft.com. The sharing mode of the object. You cannot request a sharing mode that conflicts with the access mode specified in a previous open request whose handle is still open. If this parameter is zero (0) and CreateFile succeeds, the object cannot be shared and cannot be opened again until the handle is closed. To enable other processes to share the object while your process has it open, use a combination of one or Read more on docs.microsoft.com. If the function succeeds, the return value is an open handle to the specified file. If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call GetLastError. Learn more about this API from docs.microsoft.com. Sets the file information for the specified file. A handle to the file for which to change information. This handle must be opened with the appropriate permissions for the requested change. For more information, see the Remarks and Example Code sections. This handle should not be a pipe handle. Read more on docs.microsoft.com. A FILE_INFO_BY_HANDLE_CLASS enumeration value that specifies the type of information to be changed. For a table of valid values, see the Remarks section. Read more on docs.microsoft.com. A pointer to the buffer that contains the information to change for the specified file information class. The structure that this parameter points to corresponds to the class that is specified by FileInformationClass. For a table of valid structure types, see the Remarks section. Read more on docs.microsoft.com. The size of lpFileInformation, in bytes. Returns nonzero if successful or zero otherwise. To get extended error information, call GetLastError. Learn more about this API from docs.microsoft.com. The SECURITY_ATTRIBUTES structure contains the security descriptor for an object and specifies whether the handle retrieved by specifying this structure is inheritable. Read more on docs.microsoft.com. The size, in bytes, of this structure. Set this value to the size of the **SECURITY\_ATTRIBUTES** structure. A pointer to a [**SECURITY\_DESCRIPTOR**](../winnt/ns-winnt-security_descriptor.md) structure that controls access to the object. If the value of this member is **NULL**, the object is assigned the default security descriptor associated with the [*access token*](/windows/win32/secauthz/access-tokens) of the calling process. This is not the same as granting access to everyone by assigning a **NULL** [*discretionary access control list*](/windows/win32/secauthz/dacls-and-aces) (DACL). By default, the default DACL in the access token of a process allows access only to the user represented by the access token. For information about creating a security descriptor, see [Creating a Security Descriptor](/windows/win32/secauthz/creating-a-security-descriptor-for-a-new-object-in-c--). Read more on docs.microsoft.com. A Boolean value that specifies whether the returned handle is inherited when a new process is created. If this member is **TRUE**, the new process inherits the handle.
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