我正試圖從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設備,但它值得一試。 –