从 IIS 中运行的 MVC 应用程序调用 LoadLibrary

发布于 2024-10-27 10:53:01 字数 479 浏览 5 评论 0原文

我在 MVC 应用程序中执行这行代码时遇到问题:

IntPtr hModule = LoadLibrary(BondProbeSettings.AssemblyFilePath);

问题是 hModule 始终为 0

如果我使用相同的 BondProbeSettings.AssemblyFilePath 值运行相同的代码,但从控制台应用程序而不是 MVC 应用程序 hModule 则为非零。

我需要考虑任何安全问题吗?

LoadLibrary 的签名是:

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
static extern IntPtr LoadLibrary(string lpFileName);

I'm having trouble executing this line of code in my MVC application:

IntPtr hModule = LoadLibrary(BondProbeSettings.AssemblyFilePath);

The problem is that hModule is always 0.

If I run the same code with the same value for BondProbeSettings.AssemblyFilePath but from a console application instead of the MVC app hModule is non-zero.

Are there any security issues I need to consider?

The signature for LoadLibrary is:

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
static extern IntPtr LoadLibrary(string lpFileName);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苦笑流年记忆 2024-11-03 10:53:01

将声明更改为: 将

[DllImport("kernel32.dll", CharSet = CharSet.Auto), SetLastError = true)]
static extern IntPtr LoadLibrary(string lpFileName);

代码更改为:

IntPtr hModule = LoadLibrary(BondProbeSettings.AssemblyFilePath);
if (hModule == IntPtr.Zero) throw new System.ComponentModel.Win32Exception();

现在您会知道为什么它不起作用。

Change the declaration to:

[DllImport("kernel32.dll", CharSet = CharSet.Auto), SetLastError = true)]
static extern IntPtr LoadLibrary(string lpFileName);

And your code to:

IntPtr hModule = LoadLibrary(BondProbeSettings.AssemblyFilePath);
if (hModule == IntPtr.Zero) throw new System.ComponentModel.Win32Exception();

Now you'll know why it doesn't work.

心房的律动 2024-11-03 10:53:01

是的,您需要以完全信任的方式运行站点程序集。我自己还没有配置这个,但我认为你需要:

  • GAC dll(意味着它必须是强名称)
  • ,也许在 IIS 中配置应用程序池(假设 IIS)以允许完全信任(?)

我在 Linux 上,所以我现在无法通过屏幕截图帮助您

Yep you need to run the site assembly in full trust. I haven't configured this myself but I reckon you need:

  • to GAC the dll (meaning it has to be strongnamed)
  • to perhaps configure the application pool in IIS (assuming IIS) to allow full trust (?)

I'm on linux so I can't really help you with screenshots right now

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文