www.easefilter.com
Open in
urlscan Pro
52.36.230.137
Public Scan
URL:
https://www.easefilter.com/kb/fltkernel-fltcreatefile.htm
Submission Tags: falconsandbox
Submission: On September 15 via api from US — Scanned from DE
Submission Tags: falconsandbox
Submission: On September 15 via api from US — Scanned from DE
Form analysis
1 forms found in the DOMGET ../Subscribe.aspx
<form method="get" action="../Subscribe.aspx">
<h2>SUBSCRIBE</h2>
<label>Name</label>
<input type="text" id="name" name="name" placeholder="">
<label>Email</label>
<input type="text" id="email" name="email" placeholder="">
<input type="submit" name="Button1" value="SUBSCRIBE">
</form>
Text Content
* HOME * Solutions * Download * Blog * Contact EASEFILTER REFERENCE EASEFILTER SDK PROGRAMMING FILE MONITOR EXAMPLE FILE PROTECTOR EXAMPLE FOLDER LOCKER EXAMPLE AUTO FILE ENCRYPTION EXAMPLE REGISTRY PROTECTION EXAMPLE PROCESS PROTECTION EXAMPLE SECURE SANDBOX EXAMPLE SECURE FILE SHARING EXAMPLE FILESYSTEMWATCHER EXAMPLE MONITOR AND CONTROL FILE ACCESS COMPREHENSIVE SECURITY SOLUTION TRANSPARENT FILE ENCRYPTION STORAGE TIERING SDK.HTM SECURE CLOUD DATA TIERED CLOUD STORAGE SOLUTION FILTER DRIVER SDK EASEFILTER SDK FAQ EASEFILTER SDK MANUAL AZURE BLOB STORAGE S3 STORAGE INTRODUCTION FILTERDRIVER REFERENCE MINIFILTER FRAMEWORK ISOLATION FILTER DRIVER UNDERSTANDING MINIFILTER UNDERSTANDING FILE I/O UNDERSTANDING I/O REQUEST PACKETS FILTER DRIVER DEVELOPMENT GUIDE FILTER DRIVER DEVELOPMENT FILTER DRIVER RESOURCES KERNEL DEBUGGING WITH WINDBG UNDERSTANDING I/O PROCESS IRP VS FAST I/O WINDOWS FILE APIS CREATEFILE CREATEDIRECTORY REMOVEDIRECTORY CLOSEHANDLE READFILE WRITEFILE DELETEFILE MOVEFILE COPYFILE SETFILETIME SETFILEPOINTER SETENDOFFILE SETFILEATTRIBUTES SETFILEINFORMATIONBYHANDLE SETNAMEDSECURITYINFO SETSECURITYINFO GETNAMEDSECURITYINFO GETSECURITYINFO GETFILEATTRIBUTES GETFILEINFORMATIONBYHANDLE GETFILESIZE GETFILETIME FINDFIRSTFILE FINDNEXTFILE FINDCLOSE FILTER MANAGER APIS FLTCREATEFILE FLTCREATEFILEEX FLTCREATEFILEEX2 FLTCLOSE FLTREADFILE FLTREADFILEEX FLTWRITEFILE FLTWRITEFILEEX FLTQUERYINFORMATIONFILE FLTQUERYVOLUMEINFORMATIONFILE FLTQUERYVOLUMEINFORMATION FLTQUERYINFORMATIONBYNAME FLTQUERYDIRECTORYFILE FLTQUERYEAFILE FLTQUERYSECURITYOBJECT FLTSETINFORMATIONFILE FLTSETVOLUMEINFORMATION FLTSETEAFILE FLTSETSECURITYOBJECT FLTGETFILENAMEINFORMATION FLTGETDESTINATIONFILENAMEINFORMATION FLTGETTUNNELEDNAME FLTPARSEFILENAMEINFORMATION FLTREFERENCEFILENAMEINFORMATION FLTRELEASEFILENAMEINFORMATION FLTCREATESECTIONFORDATASCAN FLTCLOSESECTIONFORDATASCAN FLTSTARTFILTERING FLTUNREGISTERFILTER FLTCREATECOMMUNICATIONPORT FLTBUILDDEFAULTSECURITYDESCRIPTOR FLTFREESECURITYDESCRIPTOR FILTERCONNECTCOMMUNICATIONPORT FLTCLOSECLIENTPORT FLTSENDMESSAGE FILTERGETMESSAGE FILTERREPLYMESSAGE FLTCLOSECOMMUNICATIONPORT FLTATTACHVOLUME FLTDETACHVOLUME FLTALLOCATECONTEXT FLTRELEASECONTEXT FLTDELETECONTEXT FLTSETINSTANCECONTEXT FLTGETINSTANCECONTEXT FLTDELETEINSTANCECONTEXT FLTSETVOLUMECONTEXT FLTGETVOLUMECONTEXT FLTDELETEVOLUMECONTEXT FLTSETSTREAMHANDLECONTEXT FLTGETSTREAMHANDLECONTEXT FLTDELETESTREAMHANDLECONTEXT FLTSETSTREAMCONTEXT FLTGETSTREAMCONTEXT FLTDELETESTREAMCONTEXT FLTSETFILECONTEXT FLTDELETEFILECONTEXT FLTCREATEFILE FUNCTION Download EaseFilter Filter Driver SDK Setup File Download EaseFilter Filter Driver SDK Zip File Minifilter drivers call FltCreateFile to create a new file or open an existing file. SYNTAX NTSTATUS FLTAPI FltCreateFile( PFLT_FILTER Filter, PFLT_INSTANCE Instance, PHANDLE FileHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, PIO_STATUS_BLOCK IoStatusBlock, PLARGE_INTEGER AllocationSize, ULONG FileAttributes, ULONG ShareAccess, ULONG CreateDisposition, ULONG CreateOptions, PVOID EaBuffer, ULONG EaLength, ULONG Flags ); PARAMETERS Filter An opaque filter pointer for the caller. Instance An opaque instance pointer for the minifilter driver instance that the create request is to be sent to. The instance must be attached to the volume where the file or directory resides. This parameter is optional and can be NULL. If this parameter is NULL, the request is sent to the device object at the top of the file system driver stack for the volume. If it is non-NULL, the request is sent only to minifilter driver instances that are attached below the specified instance. FileHandle A pointer to a caller-allocated variable that receives the file handle if the call to FltCreateFile is successful. DesiredAccess A bitmask of flags specifying the type of access that the caller requires to the file or directory. The set of system-defined DesiredAccess flags determines the following specific access rights for file objects. Do not specify FILE_READ_DATA, FILE_WRITE_DATA, FILE_EXECUTE, or FILE_APPEND_DATA when creating or opening a directory. DesiredAccess Flags Meaning DELETE The file can be deleted. FILE_READ_DATA Data can be read from the file. FILE_READ_ATTRIBUTES FileAttributes flags, described later, can be read. FILE_READ_EA Extended attributes associated with the file can be read. READ_CONTROL The access control list (ACL) and ownership information associated with the file can be read. FILE_WRITE_DATA Data can be written to the file. FILE_WRITE_ATTRIBUTES FileAttributes flags can be written. FILE_WRITE_EA Extended attributes associated with the file can be written. FILE_APPEND_DATA Data can be appended to the file. WRITE_DAC The discretionary access control list (DACL) associated with the file can be written. WRITE_OWNER Ownership information associated with the file can be written. SYNCHRONIZE The caller can synchronize the completion of an I/O operation by waiting for the returned FileHandle to be set to the Signaled state. This flag must be set if the CreateOptions FILE_SYNCHRONOUS_IO_ALERT or FILE_SYNCHRONOUS_IO_NONALERT flag is set. FILE_EXECUTE Use system paging I/O to read data from the file into system memory. Alternatively, for any file object that does not represent a directory, you can specify one or more of the following generic ACCESS_MASK flags. (The STANDARD_RIGHTS_XXX flags are predefined system values that are used to enforce security on system objects.) You can also combine these generic flags with additional flags from the preceding table. DesiredAccess to File Values Maps to DesiredAccess Flags GENERIC_READ STANDARD_RIGHTS_READ, FILE_READ_DATA, FILE_READ_ATTRIBUTES, FILE_READ_EA, and SYNCHRONIZE. GENERIC_WRITE STANDARD_RIGHTS_WRITE, FILE_WRITE_DATA, FILE_WRITE_ATTRIBUTES, FILE_WRITE_EA, FILE_APPEND_DATA, and SYNCHRONIZE. GENERIC_EXECUTE STANDARD_RIGHTS_EXECUTE, SYNCHRONIZE, FILE_READ_ATTRIBUTES, and FILE_EXECUTE. For directories, you can specify one or more of the following ACCESS_MASK flags, which you can also combine with any compatible flags that were described earlier. DesiredAccess to Directory Values Meaning FILE_LIST_DIRECTORY Files in the directory can be listed. FILE_TRAVERSE The directory can be traversed: that is, it can be part of the pathname of a file. ObjectAttributes A pointer to a structure already initialized with InitializeObjectAttributes. If the caller is running in the system process context, this parameter can be NULL. Otherwise, the caller must set the OBJ_KERNEL_HANDLE attribute in the call to InitializeObjectAttributes. Members of this structure for a file object include the following. Member Value ULONGLength Specifies the number of bytes of ObjectAttributes data supplied. This value must be at least sizeof(OBJECT_ATTRIBUTES). PUNICODE_STRING ObjectName Pointer to a UNICODE_STRING structure containing the name of the file to be created or opened. This name must be a fully qualified file specification or the name of a device object unless it is the name of a file relative to the directory specified by RootDirectory. For example, \Device\Floppy1\myfile.dat or ??\B:\myfile.dat could be the fully qualified file specification, if the floppy driver and overlying file system are already loaded. (Note: ?? replaces \DosDevices as the name of the Win32 object namespace. \DosDevices still works, but ?? is translated faster by the object manager.) HANDLERootDirectory Optionally specifies a handle to a directory obtained by a preceding call to FltCreateFile. If this value is NULL, the ObjectName member must be a fully qualified file specification that includes the full path to the target file. If this value is non-NULL, the ObjectName member specifies a file name relative to this directory. PSECURITY_DESCRIPTOR SecurityDescriptor Optionally specifies a security descriptor (SECURITY_DESCRIPTOR) to be applied to a file. ACLs specified by such a security descriptor are only applied to the file when it is created. If the value is NULL when a file is created, the ACL placed on the file is file-system-dependent; most file systems propagate some part of such an ACL from the parent directory file combined with the caller's default ACL. ULONGAttributes Is a set of flags that controls the file object attributes. If the caller is running in the system process context, this parameter can be zero. Otherwise, the caller must set the OBJ_KERNEL_HANDLE flag. The caller can also optionally set the OBJ_CASE_INSENSITIVE flag, which indicates that name-lookup code should ignore the case of ObjectName rather than performing an exact-match search. IoStatusBlock A pointer to an IO_STATUS_BLOCK structure that receives the final completion status and information about the requested operation. On return from FltCreateFile, the Information member contains one of the following values. * FILE_CREATED * FILE_OPENED * FILE_OVERWRITTEN * FILE_SUPERSEDED * FILE_EXISTS * FILE_DOES_NOT_EXIST AllocationSize Optionally specifies the initial allocation size, in bytes, for the file stream. A nonzero value has no effect unless the file is being created, overwritten, or superseded. FileAttributes Specifies one or more of the following FILE_ATTRIBUTE_XXX flags, which represent the file attributes to set if you are creating, superseding, or overwriting a file. Normally, you specify FILE_ATTRIBUTE_NORMAL, which sets the default attributes. FileAttributes Flags Meaning FILE_ATTRIBUTE_NORMAL A file with standard attributes should be created. FILE_ATTRIBUTE_READONLY A read-only file should be created. FILE_ATTRIBUTE_HIDDEN A hidden file should be created. FILE_ATTRIBUTE_SYSTEM A system file should be created. FILE_ATTRIBUTE_ARCHIVE An archive file should be created. This attribute is used to mark files for backup or removal. FILE_ATTRIBUTE_TEMPORARY A temporary file should be created. ShareAccess Specifies the type of share access to the file that the caller requires, as zero or one, or a combination of the following flags. To request exclusive access, set this parameter to zero. If the IO_IGNORE_SHARE_ACCESS_CHECK flag is specified in the Flags parameter, the I/O manager ignores this parameter. However, the file system might still perform access checks. Thus, it is important to specify the sharing mode you would like for this parameter, even when using the IO_IGNORE_SHARE_ACCESS_CHECK flag. For the greatest chance of avoiding sharing violation errors, specify all of the following share access flags. ShareAccess Flags Meaning FILE_SHARE_READ The file can be opened for read access by other threads. FILE_SHARE_WRITE The file can be opened for write access by other threads. FILE_SHARE_DELETE The file can be opened for delete access by other threads. CreateDisposition Specifies a value that determines the action to be taken, depending on whether the file already exists. The value can be any of those described following. CreateDisposition Values Meaning FILE_SUPERSEDE If the file already exists, replace it with the given file. If it does not, create the given file. FILE_CREATE If the file already exists, fail the request and do not create or open the given file. If it does not, create the given file. FILE_OPEN If the file already exists, open it instead of creating a new file. If it does not, fail the request and do not create a new file. FILE_OPEN_IF If the file already exists, open it. If it does not, create the given file. FILE_OVERWRITE If the file already exists, open it and overwrite it. If it does not, fail the request. FILE_OVERWRITE_IF If the file already exists, open it and overwrite it. If it does not, create the given file. CreateOptions Specifies the options to be applied when creating or opening the file, as a compatible combination of the following flags. CreateOptions Flags Meaning FILE_DIRECTORY_FILE (0x00000001) The file being created or opened is a directory file. With this flag, the CreateDisposition parameter must be set to one of FILE_CREATE, FILE_OPEN, or FILE_OPEN_IF. With this flag, other compatible CreateOptions flags include only the following: FILE_SYNCHRONOUS_IO_ALERT, FILE_SYNCHRONOUS_IO_NONALERT, FILE_WRITE_THROUGH, FILE_OPEN_FOR_BACKUP_INTENT, and FILE_OPEN_BY_FILE_ID. FILE_WRITE_THROUGH (0x00000002) System services, file systems, and drivers that write data to the file must actually transfer the data into the file before any requested write operation is considered complete. FILE_SEQUENTIAL_ONLY (0x00000004) All accesses to the file will be sequential. FILE_NO_INTERMEDIATE_BUFFERING (0x00000008) The file cannot be cached or buffered in a driver's internal buffers. This flag is incompatible with the *DesiredAccess *FILE_APPEND_DATA flag. FILE_SYNCHRONOUS_IO_ALERT (0x00000010) All operations on the file are performed synchronously. Any wait on behalf of the caller is subject to premature termination from alerts. This flag also causes the I/O system to maintain the file position context. If this flag is set, the DesiredAccess SYNCHRONIZE flag also must be set so that the I/O Manager uses the file object as a synchronization object. FILE_SYNCHRONOUS_IO_NONALERT (0x00000020) All operations on the file are performed synchronously. Waits in the system to synchronize I/O queuing and completion are not subject to alerts. This flag also causes the I/O system to maintain the file position context. If this flag is set, the DesiredAccess SYNCHRONIZE flag also must be set so that the I/O Manager uses the file object as a synchronization object. FILE_NON_DIRECTORY_FILE (0x00000040) The file being opened must not be a directory file or this call fails. The file object being opened can represent a data file; a logical, virtual, or physical device; or a volume. FILE_CREATE_TREE_CONNECTION (0x00000080) Create a tree connection for this file in order to open it over the network. FILE_COMPLETE_IF_OPLOCKED (0x00000100) Complete this operation immediately with an alternate success code if the target file is oplocked, rather than blocking the caller's thread. If the file is oplocked, another caller already has access to the file over the network. FILE_NO_EA_KNOWLEDGE (0x00000200) If the extended attributes on an existing file being opened indicate that the caller must understand extended attributes to properly interpret the file, fail this request because the caller does not understand how to deal with extended attributes. FILE_OPEN_REMOTE_INSTANCE (0x00000400) Reserved for system use; do not use. FILE_RANDOM_ACCESS (0x00000800) Accesses to the file can be random, so no sequential read-ahead operations should be performed on the file by file systems or the operating system. FILE_DELETE_ON_CLOSE (0x00001000) Delete the file when the last handle to it is passed to FltClose. FILE_OPEN_BY_FILE_ID (0x00002000) The file is being opened by ID. The file name contains the name of a device and a 64-bit ID to be used to open the file. FILE_OPEN_FOR_BACKUP_INTENT (0x000004000) The file is being opened for backup intent; therefore, the system should check for certain access rights and grant the caller the appropriate accesses to the file before checking the input DesiredAccess against the file's security descriptor. FILE_NO_COMPRESSION (0x00008000) Suppress inheritance of FILE_ATTRIBUTE_COMPRESSED from the parent directory. This allows creation of a non-compressed file in a directory that is marked compressed. FILE_OPEN_REQUIRING_OPLOCK (0x00010000) The file is being opened and an opportunistic lock (oplock) on the file is being requested as a single atomic operation. The file system checks for oplocks before it performs the create operation, and the create operation will fail with a return code of STATUS_CANNOT_BREAK_OPLOCK if the create operation would break an existing oplock. This flag is available in Windows 7, Windows Server 2008 R2 and later Windows operating systems. FILE_DISALLOW_EXCLUSIVE (0x00020000) When opening an existing file, if FILE_SHARE_READ is not specified and file system access checks would not grant the caller write access to the file, fail this open with STATUS_ACCESS_DENIED. This was default behavior prior to Windows 7. FILE_SESSION_AWARE (0x00040000) The file or device is being opened with session awareness. If this flag is not specified, then per-session devices (such as a device using RemoteFX USB Redirection) cannot be opened by processes running in session 0. This flag has no effect for callers not in session 0. This flag is supported only on server editions of Windows. This flag is not supported before Windows Server 2012. FILE_RESERVE_OPFILTER (0x00100000) This flag allows an application to request a filter opportunistic lock (oplock) to prevent other applications from getting share violations. If there are already open handles, the create request will fail with STATUS_OPLOCK_NOT_GRANTED. For more information, see the following Remarks section. FILE_OPEN_REPARSE_POINT (0x00200000) Open a file with a reparse point and bypass normal reparse point processing for the file. For more information, see the following Remarks section. FILE_OPEN_NO_RECALL (0x00400000) Instructs any filters that perform offline storage or virtualization to not recall the contents of the file as a result of this open. FILE_OPEN_FOR_FREE_SPACE_QUERY (0x00800000) This flag instructs the file system to capture the user associated with the calling thread. Any subsequent calls to FltQueryVolumeInformation or ZwQueryVolumeInformationFile using the returned handle will assume the captured user, rather than the calling user at the time, for purposes of computing the free space available to the caller. This applies to the following FsInformationClass values: FileFsSizeInformation, FileFsFullSizeInformation, and FileFsFullSizeInformationEx. EaBuffer A pointer to a caller-supplied FILE_FULL_EA_INFORMATION-structured buffer containing extended attribute (EA) information to be applied to the file. EaLength Length, in bytes, of EaBuffer. Flags Specifies options to be used during the creation of the create request. The following table lists the available options. Options Flags Meaning IO_FORCE_ACCESS_CHECK Indicates that the I/O manager must check the create request against the file's security descriptor. IO_IGNORE_SHARE_ACCESS_CHECK Indicates that the I/O manager should not perform share-access checks on the file object after it is created. However, the file system might still perform these checks. RETURN VALUE FltCreateFile returns STATUS_SUCCESS or an appropriate NTSTATUS value such as one of the following: Return code Description STATUS_FLT_DELETING_OBJECT The specified Filter or Instance is being torn down. This status code can be received if the open crosses a volume mount point and the Instance parameter is non-NULL. This is an error code. STATUS_INSUFFICIENT_RESOURCES FltCreateFile encountered a pool allocation. This is an error code. STATUS_MOUNT_POINT_NOT_RESOLVED The file or directory name contains a mount point that resolves to a volume other than the one that the specified minifilter driver instance is attached to. STATUS_OBJECT_PATH_SYNTAX_BAD The ObjectAttributes parameter did not contain a RootDirectory member, but the ObjectName member in the OBJECT_ATTRIBUTES structure was an empty string or did not contain an OBJECT_NAME_PATH_SEPARATOR character. This indicates incorrect syntax for the object path. Note FltCreateFile might return STATUS_FILE_LOCK_CONFLICT as the return value or in the Status member of the IO_STATUS_BLOCK structure that is pointed to by the IoStatusBlock parameter. This would occur only if the NTFS log file is full, and an error occurs while FltCreateFile tries to handle this situation. REMARKS On versions of Windows earlier than Microsoft Windows Update Rollup for Windows 2000 SP4 and Windows Server 2003 SP1, minifilter drivers should call FltCreateFile instead of IoCreateFile, IoCreateFileSpecifyDeviceObjectHint, or ZwCreateFile to obtain a file handle for use with ZwXxx I/O routines such as ZwReadFile and ZwQueryInformationFile. On Microsoft Windows Update Rollup for Windows 2000 SP4, Windows Server 2003 SP1 and later, minifilter drivers can use FltCreateFileEx to obtain a file object pointer for use with FltXxxFile routines such as FltReadFile and FltWriteFile. On earlier versions of Windows, the handle obtained from FltCreateFile can be converted into a file object pointer by calling ObReferenceObjectByHandle as follows: NTSTATUS Copy status = ObReferenceObjectByHandle( handle, //Handle 0, //DesiredAccess NULL, //ObjectType KernelMode, //AccessMode &handleFileObject, //Object NULL); //HandleInformation</pre> FltCreateFile sends the create request only to the instances attached below the specified minifilter driver instance and to the file system. The specified instance and the instances attached above it do not receive the create request. If no instance is specified, the request goes to the top of the stack and is received by all instances and the file system. There are two alternate ways to specify the name of the file to be created or opened with FltCreateFile: * As a fully qualified pathname, supplied in the ObjectName member of the input ObjectAttributes * As a pathname relative to the directory file represented by the handle in the **RootDirectory **member of the input ObjectAttributes * Any handle that is obtained from FltCreateFile must eventually be released by calling FltClose. Driver routines that do not run in the system process context must set the OBJ_KERNEL_HANDLE attribute for the ObjectAttributes parameter of FltCreateFile. Setting this attribute restricts the use of the handle that is returned by FltCreateFile to processes running in kernel mode. Otherwise, the handle can be accessed by the process in whose context the driver is running. Note Do not call this routine with a non-NULL top level IRP value, as this can cause a system deadlock. Certain DesiredAccess flags and combinations of flags have the following effects: * For a caller to synchronize an I/O completion by waiting for the returned FileHandle to be set to the Signaled state, the SYNCHRONIZE flag must be set. * Setting the FILE_WRITE_DATA flag for a file also allows writes beyond the end of the file to occur. The file is automatically extended for this type of write, as well. * If only the FILE_EXECUTE and SYNCHRONIZE flags are set, the caller cannot use the returned FileHandle to directly read or write any data to or from the file. That is, all operations on the file must use system paging I/O to read or write file data. The ShareAccess parameter determines whether separate threads can access the same file, possibly simultaneously. If both file openers have the privilege to access a file in the specified manner, the file can be successfully opened and shared. If the original caller of FltCreateFile does not specify FILE_SHARE_READ, FILE_SHARE_WRITE, or FILE_SHARE_DELETE, no other open operations can be performed on the file because the original caller is given exclusive access to the file. For a shared file to be successfully opened, the requested DesiredAccess to the file must be compatible with both the DesiredAccess and ShareAccess specifications of all preceding opens that have not yet been released with FltClose. That is, the DesiredAccess specified to FltCreateFile for a given file must not conflict with the accesses that other openers of the file have disallowed. Note If IO_IGNORE_SHARE_ACCESS_CHECK is specified in the Flags parameter, the I/O manager ignores the ShareAccess parameter. However, the file system might still perform access checks. Thus, it is important to specify the sharing mode you would like for the *ShareAccess *parameter, even when using the IO_IGNORE_SHARE_ACCESS_CHECK flag. The CreateDisposition value FILE_SUPERSEDE requires that the caller have DELETE access to an existing file object. If so, a successful call to FltCreateFile with FILE_SUPERSEDE on an existing file effectively deletes that file and then recreates it. This implies that if the file has already been opened by another thread, it opened the file by specifying a *ShareAccess *parameter with the FILE_SHARE_DELETE flag set. Note that this type of disposition is consistent with the POSIX style of overwriting files. The CreateDisposition values FILE_OVERWRITE_IF and FILE_SUPERSEDE are similar. If FltCreateFile is called with an existing file and either of these CreateDisposition values, the file is replaced. Overwriting a file is semantically equivalent to a supersede operation, except for the following: * The caller must have write access to the file, rather than delete access. This implies that, if the file has already been opened by another thread, it opened the file with the FILE_SHARE_WRITE flag set in the input ShareAccess. * The specified file attributes are logically ORed with those already on the file. This implies that if the file has already been opened by another thread, a subsequent caller of FltCreateFile cannot disable existing FileAttributes flags but can enable additional flags for the same file. Note that this style of overwriting files is consistent with MS-DOS, Windows 3.1, and OS/2. The CreateOptions FILE_DIRECTORY_FILE value specifies that the file to be created or opened is a directory file. When a directory file is created, the file system creates an appropriate structure on the disk to represent an empty directory for that particular file system's on-disk structure. If this option was specified and the given file to be opened is not a directory file or if the caller specified an inconsistent CreateOptions or CreateDisposition value, the call to FltCreateFile fails. The CreateOptions FILE_NO_INTERMEDIATE_BUFFERING flag prevents the file system from performing any intermediate buffering on behalf of the caller. Specifying this value places certain restrictions on the caller's parameters to Zw..File routines, including the following: * Any byte Offset value passed to ZwReadFile or ZwWriteFile must be a multiple of the sector size. * The Length passed to ZwReadFile or ZwWriteFile must be a multiple of the sector size. Note that specifying a read operation to a buffer whose length is exactly the sector size might result in fewer significant bytes being transferred to that buffer if the end of the file was reached during the transfer. * Buffers must be aligned in accordance with the alignment requirement of the underlying storage device. This information can be obtained by calling FltCreateFile to get a handle for the file object that represents the physical device and then calling ZwQueryInformationFile with that handle, specifying FileAlignmentInformation as the FileInformationClass. For more information about the system FILE_XXX_ALIGNMENT values, which are defined in ntifs.h, see DEVICE_OBJECT and Initializing a Device Object. * Calls to ZwSetInformationFile with the FileInformationClass parameter set to FilePositionInformation must specify an offset that is a multiple of the sector size. The CreateOptions FILE_SYNCHRONOUS_IO_ALERT and FILE_SYNCHRONOUS_IO_NONALERT, which are mutually exclusive as their names suggest, specify that the file is being opened for synchronous I/O. This means that all I/O operations on the file are to be synchronous as long as they occur through the file object that the returned FileHandle refers to. All I/O on such a file is serialized across all threads by using the returned handle. With either of these CreateOptions set, the I/O Manager maintains the current file position offset in the file object's CurrentByteOffset field. This offset can be used in calls to ZwReadFile and ZwWriteFile. It can also be queried or set by calling ZwQueryInformationFile or ZwSetInformationFile. If the CreateOptions FILE_OPEN_REPARSE_POINT flag is not specified and FltCreateFile attempts to open a file with a reparse point, normal reparse point processing occurs for the file. If, on the other hand, the FILE_OPEN_REPARSE_POINT flag is specified, normal reparse processing does not occur and FltCreateFile attempts to directly open the reparse point file. In either case, if the open operation was successful, FltCreateFile returns STATUS_SUCCESS; otherwise, the routine returns an NTSTATUS error code. FltCreateFile never returns STATUS_REPARSE. The CreateOptions FILE_OPEN_REQUIRING_OPLOCK flag eliminates the time between when you open the file and request an oplock that could potentially enable a third party to open the file and get a sharing violation. An application can use the FILE_OPEN_REQUIRING_OPLOCK flag on FltCreateFile and then request any oplock. This ensures that an oplock owner will be notified of any later open request that causes a sharing violation. In Windows 7, if other handles exist on the file when an application uses the FILE_OPEN_REQUIRING_OPLOCK flag, the create operation will fail with STATUS_OPLOCK_NOT_GRANTED. This restriction no longer exists starting with Windows 8. If this create operation would break an oplock that already exists on the file, then setting the FILE_OPEN_REQUIRING_OPLOCK flag will cause the create operation to fail with STATUS_CANNOT_BREAK_OPLOCK. The existing oplock will not be broken by this create operation. An application that uses this flag must request an oplock after this call succeeds, or all later attempts to open the file will be blocked without the benefit of typical oplock processing. Similarly, if this call succeeds but the later oplock request fails, an application that uses this flag must close its handle after it detects that the oplock request has failed. Note The FILE_OPEN_REQUIRING_OPLOCK flag is available in Windows 7, Windows Server 2008 R2 and later Windows operating systems. The Microsoft file systems that implement this flag in Windows 7 are NTFS, FAT, and exFAT. The CreateOptions flag FILE_RESERVE_OPFILTER allows an application to request a level 1, batch, or filter oplock to prevent other applications from getting share violations. However, FILE_RESERVE_OPFILTER is only practically useful for filter oplocks. To use it, you must complete the following steps: 1. Issue a create request with CreateOptions of FILE_RESERVE_OPFILTER, DesiredAccess of exactly FILE_READ_ATTRIBUTES, and ShareAccess of exactly FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE. * If there are already open handles, the create request fails with STATUS_OPLOCK_NOT_GRANTED, and the next requested oplock also fails. * If you open with more access or less sharing will also cause a failure of STATUS_OPLOCK_NOT_GRANTED. 2. If the create request succeeds, request an oplock. 3. Open another handle to the file to do I/O. Step three makes this practical only for filter oplocks. The handle opened in step 3 can have a DesiredAccess that contains a maximum of FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES | FILE_READ_DATA | FILE_READ_EA | FILE_EXECUTE | SYNCHRONIZE | READ_CONTROL and still not break a filter oplock. However, any DesiredAccess greater than FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES | SYNCHRONIZE will break a level 1 or batch oplock and make the FILE_RESERVE_OPFILTER flag useless for those oplock types. NTFS is the only Microsoft file system that implements FILE_RESERVE_OPFILTER. Minifilter drivers must use FltSetInformationFile, not ZwSetInformationFile, to rename a file. Note If you try to open a volume but only specify a combination of the following flags for the DesiredAccess parameter, FltCreateFile will open a handle, independent of the file system, that has direct access to the storage device for the volume. * FILE_READ_ATTRIBUTES * READ_CONTROL * WRITE_DAC * WRITE_OWNER * SYNCHRONIZE You must not use FltCreateFile to open a handle with direct access to the storage device for the volume or you will leak system resources. If you want to open a handle with direct access to a storage device, call the IoCreateFileEx, IoCreateFileSpecifyDeviceObjectHint, or ZwCreateFile function instead. REQUIREMENTS Minimum supported client Available in Microsoft Windows 2000 Update Rollup 1 for SP4, Windows XP SP2, Windows Server 2003 SP1, and later operating systems. Not available in Windows 2000 SP4 and earlier operating systems. Target Platform Universal Header fltkernel.h (include FltKernel.h) Library Fltmgr.lib IRQL PASSIVE_LEVEL ABOUT US We specialize in file system filter driver development. We architect, implement and test file system filter drivers for a wide range of functionalities. We can offer several levels of assistance to meet your specific needs. QUICK LINKS * Home * Solutions * Order * Forums * Contact SUBSCRIBE Name Email CONTACT US * You are welcome to contact us for sales or partnership * Sales: sales@easefilter.com * Support: support@easefilter.com * Info: info@easefilter.com FOLLOW US * * * * COPYRIGHT EASEFILTER, ALL RIGHT RESERVED.