Marshal.GetLastWin32Error()在UWP C#中抛出“拒绝访问”



我的UWP应用中有以下代码

public static class DeviceIoControlHelper
    {
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Ansi)]
        private static extern SafeFileHandle CreateFile(
           string lpFileName,
           [MarshalAs(UnmanagedType.U4)] FileAccess dwDesiredAccess,
           [MarshalAs(UnmanagedType.U4)] FileShare dwShareMode,
           IntPtr lpSecurityAttributes,
           [MarshalAs(UnmanagedType.U4)] FileMode dwCreationDisposition,
           [MarshalAs(UnmanagedType.U4)] FileAttributes dwFlagsAndAttributes,
           IntPtr hTemplateFile);
public static SafeFileHandle ReturnFileHandler()
        {
            const string drive = @"\.LCD";
            SafeFileHandle hddHandle = CreateFile(drive, FileAccess.Read, FileShare.None, IntPtr.Zero, FileMode.Open, FileAttributes.Normal, IntPtr.Zero);
            if (hddHandle.IsInvalid)
            {
                int lastError = Marshal.GetLastWin32Error();
                string errorMessage = string.Format(@"!! Invalid {0}; Error ({1}): {2}", drive, lastError, new Win32Exception(lastError).Message);
                throw new Win32Exception(errorMessage);
            }
            return hddHandle;
        }
}

但是,当我试图从MainPage.xaml.cs访问它时,我得到了一个"拒绝访问"的表达式。将Visual Studio 2015社区切换到管理模式对也没有帮助

public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            try
            {
                DeviceIoControlHelper.ReturnFileHandler();
            }
            catch(Exception ex)
            {
            }
        }
}

我在Visual Studio 2015 Community 中使用带有C#的UWP

您需要使用CreateFile2来使用通用Windows应用程序打开文件。不过,它不允许您打开设备。引用MSDN:当从Windows应用商店应用程序调用时,CreateFile2会被简化。只能打开ApplicationData.LocalFolder或Package.InstalledLocation目录中的文件或目录

最新更新