创建或打开文件或 I/O 设备。 此函数的行为与 CreateFile2 相同,只不过此函数遵循通用 Windows 平台应用安全模型。
Syntax
WINSTORAGEAPI HANDLE CreateFile2FromAppW(
LPCWSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
DWORD dwCreationDisposition,
LPCREATEFILE2_EXTENDED_PARAMETERS pCreateExParams
) noexcept;
参数
lpFileName
要创建或打开的文件或设备的名称。
有关特殊设备名称的信息,请参阅 定义 MS-DOS 设备名称。
若要创建文件流,请指定文件的名称、冒号,然后指定流的名称。 有关详细信息,请参阅 文件流。
有关在不附加“\\?\”的情况下选择退出 MAX_PATH 限制的信息,请参阅 命名文件、路径和命名空间 的“最大路径长度限制”部分,了解详细信息。
dwDesiredAccess
请求对文件或设备的访问权限,可以汇总为读取、写入或两者均未进行零访问。
最常用的值是 GENERIC_READ、 GENERIC_WRITE或两者(GENERIC_READ | GENERIC_WRITE)。 有关详细信息,请参阅 通用访问权限、 文件安全性和访问权限、 文件访问权限常量和 ACCESS_MASK。
如果此参数为零,则应用程序可以在不访问该文件或设备的情况下查询某些元数据(如文件、目录或设备属性),即使 拒绝GENERIC_READ 访问也是如此。
不能请求与已打开句柄的打开请求中 dwShareMode 参数指定的共享模式冲突的访问模式。
dwShareMode
请求的文件或设备的共享模式,可以读取、写入、删除、所有这些或无(请参阅下表)。 对属性或扩展属性的访问请求不受此标志的影响。
如果此参数为零且函数成功,则文件或设备无法共享,并且无法在文件或设备的句柄关闭之前再次打开。 有关详细信息,请参阅“备注”部分。
无法请求与具有打开句柄的现有请求中指定的访问模式冲突的共享模式。 此函数将失败, GetLastError 函数将返回 ERROR_SHARING_VIOLATION。
若要使进程能够在另一个进程打开文件或设备时共享文件或设备,请使用以下一个或多个值的兼容组合。 有关此参数与 dwDesiredAccess 参数的有效组合的详细信息,请参阅 “创建和打开文件”。
注意 无论进程上下文如何,每个打开句柄的共享选项都将有效,直到关闭该句柄。
| 价值 | Meaning |
|---|---|
| 0 0x00000000 | 如果其他进程请求删除、读取或写入访问权限,则阻止其他进程打开文件或设备。 仅当应用程序对文件具有写入访问权限时,才授予对文件或目录的独占访问权限。 |
| FILE_SHARE_DELETE 0x00000004 | 启用对文件或设备上的后续打开作以请求删除访问权限。 否则,如果进程请求删除访问权限,则无法打开文件或设备。 如果未指定此标志,但文件或设备已打开以删除访问权限,则函数将失败。 注意 删除访问权限允许删除和重命名作。 |
| FILE_SHARE_READ 0x00000001 | 允许对文件或设备执行后续打开作以请求读取访问权限。 否则,如果进程请求读取访问权限,则其他进程无法打开文件或设备。 如果未指定此标志,但已打开文件或设备进行读取访问,则函数将失败。 如果打开文件或目录,并且未指定此标志,并且调用方没有对文件或目录的写入访问权限,则函数将失败。 |
| FILE_SHARE_WRITE 0x00000002 | 允许对文件或设备执行后续打开作以请求写入访问权限。 否则,如果进程请求写入访问权限,则其他进程无法打开文件或设备。 如果未指定此标志,但已打开文件或设备进行写入访问或具有写入访问权限的文件映射,则函数将失败。 |
dwCreationDisposition
对存在或不存在的文件或设备执行的作。
对于文件以外的设备,此参数通常设置为 OPEN_EXISTING。
此参数必须是以下值之一,不能组合这些值:
| 价值 | Meaning |
|---|---|
| CREATE_ALWAYS 2 | 始终创建新文件。 如果指定的文件存在且可写,则函数将截断文件、函数成功,最后错误代码设置为 ERROR_ALREADY_EXISTS (183)。 如果指定的文件不存在且路径有效,则会创建一个新文件,该函数会成功,最后一个错误代码设置为零。 |
| CREATE_NEW 1 | 仅当该文件尚不存在时,才会创建一个新文件。 如果指定的文件存在,函数将失败,最后一个错误代码设置为 ERROR_FILE_EXISTS (80)。 如果指定的文件不存在,并且是可写位置的有效路径,则会创建一个新文件。 |
| OPEN_ALWAYS 4 | 始终打开文件。 如果指定文件存在,则函数成功,最后一个错误代码设置为 ERROR_ALREADY_EXISTS (183)。 如果指定的文件不存在并且是可写位置的有效路径,该函数将创建一个文件,最后一个错误代码设置为零。 |
| OPEN_EXISTING 3 | 仅当文件或设备存在时才打开该文件或设备。 如果指定的文件或设备不存在,函数将失败,最后一个错误代码设置为 ERROR_FILE_NOT_FOUND (2)。 |
| TRUNCATE_EXISTING 5 | 打开一个文件并截断它,使其大小为零字节,仅当它存在时。 如果指定的文件不存在,函数将失败,最后一个错误代码设置为 ERROR_FILE_NOT_FOUND (2)。 调用过程必须打开文件,并将 GENERIC_WRITE 位设置为 dwDesiredAccess 参数的一部分。 |
pCreateExParams
指向可选 CREATEFILE2_EXTENDED_PARAMETERS 结构的指针。
返回值
如果函数成功,则返回值是指定文件、设备、命名管道或邮件槽的打开句柄。
如果函数失败,则返回值 INVALID_HANDLE_VALUE。 若要获取扩展的错误信息,请调用 GetLastError。
要求
| Requirement | 价值 |
|---|---|
| 最低支持的客户端 | Windows 10 版本 1803 |
| Header | fileapifromapp.h |
| Library | OneCore.Lib |