2016-04-19 2 views
0

J'ai le code ci-dessous dans mon application UWPMarshal.GetLastWin32Error() throws Accès refusé à 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; 
     } 
} 

Mais, lorsque je tente d'y accéder de mes MainPage.xaml.cs, je me suis un expcetion de "Accès refusé". Commutation Visual Studio 2015 Communauté en mode Administrateur n'a pas aidé non plus

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

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

      } 
     } 
} 

J'utilise UWP avec C# dans Visual Studio 2015 Communauté

+0

Ce n'est pas une surprise que cela ne fonctionne pas. Les applications UWP sont en bac à sable. –

Répondre

0

Vous devrez utiliser CreateFile2 pour ouvrir les fichiers avec une application Windows Universal. Cependant, cela ne vous permettra pas d'ouvrir des appareils. Pour citer MSDN: Appelé à partir d'une application Windows Store, CreateFile2 est simplifié. Vous pouvez ouvrir uniquement des fichiers ou des répertoires dans les répertoires ApplicationData.LocalFolder ou Package.InstalledLocation.

+0

Merci pour la suggestion. Essayé avec CreateFile2 - pas de chance :(... Même erreur "Accès refusé" – siam

+0

Merci pour l'édition Dans ce cas, quel sera le premier paramètre de ** CreateFile2 **? Actuellement, je passe: 'const string drive = @ "\\. \ LCD"; 'dans ** CreateFile ** – siam

+0

siam, essayez-vous de modifier la luminosité d'un écran LCD? Si oui, vous pouvez essayer la classe WmiMonitorBrightness –