标签: urlmon

urlmon.dll FindMimeFromData()在64位桌面/控制台上运行良好,但在ASP.NET上生成错误

我正在创建一个实用程序库,以便在Web环境中的桌面环境中使用.

它包含我认为在我的应用程序中经常重复的几个功能,包括通过其内容(而不是扩展名)获取文件的mime类型的实用程序.

我必须检查的文件是最常见的(jpg,png,pdf,txt)所以我选择使用外部方法FindMimeFromData(上面的链接)

使用.NET,如何根据文件签名而不是扩展名找到文件的mime类型

该方法运行良好,除了两个不正确的mime类型的JPG(image/pjpg)和PNG(image/x-png),通过在return语句之前进行检查很容易解决.

该库是为平台AnyCPU编译的,因为它必须以32位和64位安装在服务器/客户端上.

在桌面环境测试时,所有为x86和x64编译的应用程序都正常工作.

在测试ASP.NET应用程序(带有用于测试的http处理程序的空站点)时发生类型为HRESULT的错误,并且调试器告诉我它无法提供进一步的信息.

经过一些测试配置,包括将池的身份更改为本地系统(没有结果),我已经确定了问题:

池应该允许32位应用程序(见上图).

IisAllow32BitApplication

为什么?

它不应该加载urlmon.dll我们现在的64位系统的DLL ?

这是一个很大的问题,因为该FindMimeFromData方法可以被任何地方调用到这个库中:

结果是,另一个实用程序方法调用此方法可能会抛出此异常,并且很难通过调试来跟踪问题.

任何想法/经验?

用于测试的操作系统

桌面:

  1. Windows 8 x64 - 有效
  2. Windows 7 x64 - 有效
  3. Windows Server 2008 Standard R2 x64 - 有效
  4. Windows Server 2008 Standard x86 - 有效
  5. Windows Server 2003 Standard x86 - 有效
  6. Windows XP Professional SP3 - 有效

网址:

  1. Windows 8 x64 - 发现第一个错误,仅适用于启用32位应用程序
  2. Windows Server 2008 Standard R2 x64 - 确认错误,仅适用于启用32位应用程序 …

c# dllimport 32bit-64bit urlmon

10
推荐指数
1
解决办法
6446
查看次数

URLDownloadToFile 和身份验证

我正在研究一些旧的 ATL OCX,用作“下载管理器”。它使用URLDownloadToFile API下载文件。

以前,它在网页上作为 ActiveX 托管,因此如果服务器需要身份验证,则由 IE 完成。现在它是可执行文件的一部分,因此它应该负责身份验证。假设用户提供了用户名和密码,我实际上如何进行“身份验证”?我需要支持IIS 的简单 Web 身份验证NTLM

对于简单的 Web 身份验证,我发现在 URL 之前传递用户名/密码工作正常。但我不确定这是一种正确的方法。

请指教 谢谢Zaky

c++ authentication ntlm download urlmon

5
推荐指数
1
解决办法
2142
查看次数

如何使用 IHTTPNegotiate 添加额外的 http 标头?

如何使用 IHTTPNegotiate 向请求添加额外的标头?我添加了接口,但函数BeginningTransaction & OnResponse永远不会被调用。

TNameSpaceHandler = class(TComObject, IInternetProtocol, IHttpNegotiate)  
...
    function BeginningTransaction(szURL, szHeaders: LPCWSTR; dwReserved: DWORD;
        out szAdditionalHeaders: LPWSTR): HResult; stdcall;
    function OnResponse(dwResponseCode: DWORD; szResponseHeaders, szRequestHeaders: LPCWSTR;
        out szAdditionalRequestHeaders: LPWSTR): HResult; stdcall;
...
end;
Run Code Online (Sandbox Code Playgroud)

delphi webbrowser-control urlmon twebbrowser delphi-xe4

5
推荐指数
1
解决办法
988
查看次数

为什么FindMimeFromData在一台主机上识别image/tiff,而在另一台主机上却没有?

我使用的是FindMimeFromDataurlmon.dll嗅探上传的文件的MIME类型.根据Internet Explorer中的MIME类型检测,image/tiff是一种公认​​的MIME类型.它在我的开发机器(Windows 7 64位,IE9)上工作正常,但在测试环境(Windows Server 2003 R2 64位,IE8)上不起作用 - 它返回application/octet-stream而不是image/tiff.

上述文章描述采取确定MIME类型的具体步骤,但由于image/tiff是在26种识别的类型中的一种,它应该结束于步骤2(嗅探的实际数据),因此,文件扩展名和注册的应用程序(和其它注册表的东西)不应该.

哦,对了,TIFF文件实际上在测试服务器上的程序(Windows图片和传真查看器)相关联.并不是Windows注册表中没有对TIFF的任何引用.

任何想法为什么它不能按预期工作?

编辑: FindMimeFromData使用如下:

public class MimeUtil
{
    [DllImport("urlmon.dll", CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false)]
    private static extern int FindMimeFromData(
        IntPtr pBC,
        [MarshalAs(UnmanagedType.LPWStr)] string pwzUrl,
        [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1, SizeParamIndex = 3)] byte[] pBuffer,
        int cbSize,
        [MarshalAs(UnmanagedType.LPWStr)] string pwzMimeProposed,
        int dwMimeFlags,
        out IntPtr ppwzMimeOut,
        int dwReserved);

    public static string GetMimeFromData(byte[] …
Run Code Online (Sandbox Code Playgroud)

c# winapi mime urlmon mime-types

4
推荐指数
1
解决办法
1149
查看次数

等待URLDownloadToFile()结束

我想制作从互联网上下载页面的程序并对其进行一些解析.第二部分很容易,问题是第一部分.

我想使用URLDownloadToFile()函数.但默认情况下,它不会等待完成下载.MSDN说最后一个参数是一种回调函数,但是我找不到任何关于如何使用它的信息(当它被调用时它必须做什么,甚至它是什么类型的函数).有人可以解释我最后一个参数是什么以及如何使用它(在C++中)让我的应用程序等待?

c++ urlmon

3
推荐指数
2
解决办法
1万
查看次数

由 urlmon.dll 引起的“试图读取或写入受保护的内存”

我知道这已经被问过很多次了,但不幸的是我没有找到解决我的问题的方法,我正在使用urlmon.dll从字节数组中查找 MIME 类型,但我收到了 IIS 进程的崩溃w3wp.exe

尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

编码:

public static int MimeSampleSize = 256;

public static string DefaultMimeType = "application/octet-stream";

[DllImport(@"urlmon.dll", CharSet = CharSet.Auto)]
private extern static uint FindMimeFromData(
    uint pBC,
    [MarshalAs(UnmanagedType.LPStr)] string pwzUrl,
    [MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer,
    uint cbSize,
    [MarshalAs(UnmanagedType.LPStr)] string pwzMimeProposed,
    uint dwMimeFlags,
    out uint ppwzMimeOut,
    uint dwReserverd
);

public static string GetMimeFromBytes(byte[] data)
{
    try
    {
        uint mimeType;
        FindMimeFromData(0, null, data, (uint)MimeSampleSize, null, 0, out mimeType, 0);

        var mimePointer = new IntPtr(mimeType);
        var mime = Marshal.PtrToStringUni(mimePointer); …
Run Code Online (Sandbox Code Playgroud)

c# iis urlmon

3
推荐指数
1
解决办法
1759
查看次数

我如何实现IServiceProvider?

如何IServiceProvider在我继承其他接口的类中实现,以便实际调用它们的方法?现在我总是E_NOINTERFACE回来QueryInterface.

    TPassthrough = class(TComObject, IInternetProtocolRoot, IInternetProtocolSink, IInternetProtocol, IServiceProvider)
    private
      FDefaultSink: IInternetProtocol;
      FProtSink: IInternetProtocolSink;
      FBindInfo: IInternetBindInfo;
    public
    { IServiceProvider }
    function QueryService(const rsid, iid: TGuid; out Obj): HResult; stdcall;

    { IInternetProtocolSink }
    function Switch(const ProtocolData: TProtocolData): HResult; stdcall;
    function ReportProgress(ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult; stdcall;
    function ReportData(grfBSCF: DWORD; ulProgress, ulProgressMax: ULONG): HResult; stdcall;
    function ReportResult(hrResult: HResult; dwError: DWORD; szResult: LPCWSTR): HResult; stdcall;

    { IInternetProtocolRoot }
    function Start(szUrl: LPCWSTR; OIProtSink: IInternetProtocolSink; OIBindInfo: IInternetBindInfo; grfPI, dwReserved: DWORD): …
Run Code Online (Sandbox Code Playgroud)

delphi com bho urlmon delphi-xe7

2
推荐指数
1
解决办法
665
查看次数

使用URLDownloadToFile下载文件

我使用URLDownloadToFile在Delphi中下载文件.在url中没有文件的真实名称.是否可以仅指定文件的路径,保留默认名称,即资源管理器显示?

delphi urlmon

0
推荐指数
1
解决办法
1146
查看次数