2016-04-19 9 views
0

ich den Code unten in meiner UWP appMarshal.GetLastWin32Error() throws Zugriff verweigert in UWP C#

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; 
     } 
} 

haben aber, wenn ich versuche, es für den Zugriff auf von meinem MainPage.xaml.cs, bekam ich eine expcetion von "Zugriff verweigert". Schale Visual Studio 2015 Gemeinschaft im Admin-Modus nicht geholfen entweder

public sealed partial class MainPage : Page 
    { 
     public MainPage() 
     { 
      this.InitializeComponent(); 

      try 
      { 
       DeviceIoControlHelper.ReturnFileHandler(); 
      } 
      catch(Exception ex) 
      { 

      } 
     } 
} 

I UWP bin mit C# in Visual Studio 2015 Gemeinschafts

+0

Das ist keine Überraschung, es funktioniert nicht. UWP-Apps sind Sandboxed. –

Antwort

0

Sie müssen CreateFile2 verwenden zum Öffnen von Dateien mit einer Universal-Windows-Anwendung. Sie können jedoch keine Geräte öffnen. Um MSDN zu zitieren: Wenn CreateFile2 aus einer Windows Store App aufgerufen wird, wird vereinfacht. Sie können nur Dateien oder Verzeichnisse in den Verzeichnissen ApplicationData.LocalFolder oder Package.InstalledLocation öffnen.

+0

Danke für den Vorschlag. Versucht mit CreateFile2 - kein Glück :(... Gleicher Fehler "Zugriff verweigert" – siam

+0

Danke für den Edit.In diesem Fall, was wird der erste Parameter von ** CreateFile2 **? Derzeit bin ich übergeben: 'const string drive = @ "\\. \ LCD"; 'in ** CreateFile ** – siam

+0

Siam, versuchen Sie, die Helligkeit eines LCD-Monitors zu ändern? Wenn ja, können Sie die WmiMonitorBrightness-Klasse versuchen. –