【发布时间】:2017-11-15 09:36:07
【问题描述】:
我正在尝试将一些旧的东西从 WP8 迁移到具有 C++ 扩展的通用 Windows 平台。当我尝试使用此代码时,问题就开始了
HANDLE h = CreateFile(L"NUL", 0, 0, NULL, OPEN_ALWAYS, 0, NULL);
h 为 -1,最后一个错误为 5 (ERROR_ACCESS_DENIED) CreateFile 是这样重新定义的:
HANDLE CreateFile(
_In_ LPCWSTR lpFileName,
_In_ DWORD dwDesiredAccess,
_In_ DWORD dwShareMode,
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
_In_ DWORD dwCreationDisposition,
_In_ DWORD dwFlagsAndAttributes,
_In_opt_ HANDLE hTemplateFile
)
{
CREATEFILE2_EXTENDED_PARAMETERS extendedParameters;
extendedParameters.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS);
extendedParameters.dwFileAttributes = dwFlagsAndAttributes & 0x0003FFF7;
extendedParameters.dwFileFlags = dwFlagsAndAttributes & 0xFF3C0000;
extendedParameters.dwSecurityQosFlags = SECURITY_ANONYMOUS;
extendedParameters.lpSecurityAttributes = lpSecurityAttributes;
extendedParameters.hTemplateFile = hTemplateFile;
return CreateFile2(lpFileName, dwDesiredAccess, dwShareMode,
dwCreationDisposition, &extendedParameters);
}
此代码适用于 Windows Phone 8,但不适用于 Windows 10。所以,问题是 - 我做错了什么。
【问题讨论】:
-
您正在请求以独占模式打开文件(dwShareMode 为 0)。这是故意的吗?它是否也会因不那么严格的共享模式而失败?
-
是的,如果我写 FILE_SHARE_WRITE,或 FILE_SHARE_READ,或 FILE_SHARE_WRITE | 它会做同样的事情FILE_SHARE_READ。我认为,问题隐藏在应用程序的某种权限中,但我根本没有找到任何解决方案。
-
根据the appx manifest 中请求的功能对设备访问进行严格检查。有点怀疑它们是否涵盖了传统的 MS-Dos 设备,但值得一试。
标签: c++ uwp windows-10-universal createfile