Azure WebJob运行时无法使用MapVirtualKey(user32.dll)映射虚拟键

时间:2016-05-23 23:02:47

标签: azure azure-webjobs azure-webjobssdk

.Net控制台应用程序可以正常工作,直到它作为Azure WebJob上传到Azure网站。要复制的代码:

using System;
using System.Runtime.InteropServices;
using System.Windows.Input;
namespace ConsoleApplication2
{

class Program
{
    [DllImport("user32.dll")]
    private static extern uint MapVirtualKey(uint uCode, uint uMapType);

    static void Main()
    {
        foreach (uint c in  new uint[] {18, 31})
        {
            var mapped = (int) MapVirtualKey(c, 1);
            Console.WriteLine($"{mapped} : {KeyInterop.KeyFromVirtualKey(mapped)}");
        }
    }
}

}

预期产出:

69:E

83:S

实际输出:

-1073741790:无

-1073741790:无

不知道从哪里开始。是否意味着此api呼叫拒绝访问?

1 个答案:

答案 0 :(得分:1)

这不起作用的原因是Azure Web App沙箱阻止了MapVirtualKey API。您可以在https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox上了解有关沙箱的更多信息。特别参见本段:

  

为了减少激进的攻击面积,沙盒可以防止几乎所有的Win32k.sys API被调用,这实际上意味着大多数User32 / GDI32系统调用都被阻止了。对于大多数应用程序而言,这不是问题,因为大多数Azure Web应用程序不需要访问Windows UI功能(毕竟它们是Web应用程序)。