我正试图从WP8迁移到C++扩展的通用Windows平台。这些问题开始时我尝试使用此代码关于“NUL”的UWP CreateFile2 ERROR_ACCESS_DENIED
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)。这是故意的吗?它是否也会以较不严厉的分享模式失败? – IInspectable
是的,如果我编写FILE_SHARE_WRITE,或FILE_SHARE_READ或FILE_SHARE_WRITE | FILE_SHARE_READ。我认为,这个问题隐藏在应用程序的某种权限中,但我根本没有找到任何解决方案。 – Hramovnik
根据[appx清单]中请求的功能(https://docs.microsoft.com/en-us/uwp/schemas/appxpackage/appxmanifestschema/element-devicecapability)强烈检查设备访问。有点怀疑他们覆盖了传统的MS-Dos设备,但它值得一试。 –