InternetQueryOption(..)失败,GetLastError()始终返回122(ERROR_INSUFFICIENT_BUFFER)

大师
void fn(HINTERNET hfile,...){
    char *url=new char[3000];
    DWORD *len = new DWORD;

    if(InternetQueryOption(hFile, INTERNET_OPTION_URL, url, len)==FALSE){    
        char* tmp=new char[3000];
        sprintf(temp, "InternetQueryOption failed!\nError: %d\nRequired bytes: %d\n", GetLastError(),*len);
        MessageBox(NULL, tmp, _T("myBHO !!!"), MB_OK | MB_ICONINFORMATION);
        delete [] tmp;
    }
    //....

    delete [] url;
    delete len;
}

在此函数中,我使用带有选项INTERNET_OPTION_URL的InternetQueryOption()来查找句柄hfile的URL。结果将以url []返回,长度将以len返回

但是函数总是失败,并且GetLastError()总是返回122(ERROR_INSUFFICIENT_BUFFER)。

根据,最大的URL长度可能在IE中是2083,而我使用长度3000的缓冲器,这怎么可能出错?我什至使url [] global,仍然是同样的错误。

现在,根据IntenetQueryOption()文档,如果GetLastError()返回ERROR_INSUFFICIENT_BUFFER,则变量len指向保存请求的信息所需的字节数(在这种情况下,信息为URL)。并且此值始终小于100。那么,URL如何不能容纳在ulr []中

这种奇怪行为的原因可能是什么?请帮忙。

阿德里亚诺·雷佩蒂(Adriano Repetti)

据此,当我使用长度为3000的缓冲区时,IE中最大可能的URL长度为2083。那么怎么可能出现此错误?我什至将url []设为全局,仍然是同样的错误。

浏览您的代码,您声明一个足够大的缓冲区,但没有与缓冲区InternetQueryOption大小进行通讯,这就是它总是返回的原因ERROR_INSUFFICIENT_BUFFER

并且此值始终小于100。

调用该函数后,请检查其值之前。

用这行:

DWORD *len = new DWORD;

您分配了一个指针,DWORD但是指向的内存中的值未初始化(可能是0,可能是338,可能是1234567,可能使您的应用崩溃)。您可以保留此代码,但需要将内存初始化为正确的值:

DWORD *len = new DWORD;
*len = sizeof(url);

IMO在这里,您不需要任何动态分配,您可以将其更改为:

DWORD len = sizeof(url);

现在,您可以将其地址传递给InternetQueryOption,如下所示:

if (InternetQueryOption(hFile, INTERNET_OPTION_URL, url, &len) == FALSE) {

别忘了删除delete len;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WideCharToMultiByte随机失败,错误为122 / ERROR_INSUFFICIENT_BUFFER

来自分类Dev

GetTokenInformation在第一个调用中返回ERROR_INSUFFICIENT_BUFFER

来自分类Dev

GetTokenInformation在第一个调用中返回ERROR_INSUFFICIENT_BUFFER

来自分类Dev

使用WinInet :: InternetSetOption()始终返回false,而GetLastError()返回12018

来自分类Dev

WIN API ReadFile()返回GetLastError()ERROR_INVALID_PARAMETER

来自分类Dev

WIN API ReadFile()返回GetLastError()ERROR_INVALID_PARAMETER

来自分类Dev

CreateWindowEx失败,GetLastError返回0;否则,返回0。在WindowProc中调用DefWindowProc

来自分类Dev

OpenEvent,getlasterror返回2

来自分类Dev

rc_status始终返回“失败”

来自分类Dev

GetLastError返回ERROR_OPERATION_ABORTED时,GetOverlappedResult的lpNumberOfBytesTransfered参数有效吗?

来自分类Dev

GetLastError返回ERROR_OPERATION_ABORTED时,GetOverlappedResult的lpNumberOfBytesTransfered参数有效吗?

来自分类Dev

AWS DynamoDB iOS SDK静默失败,但始终返回成功状态

来自分类Dev

Indy始终返回ResponseCode 200-即使登录失败

来自分类Dev

DoModal返回-1 Getlasterror说无效的句柄

来自分类Dev

InternetCrackUrl返回FALSE,GetLastError为120

来自分类Dev

如何创建错误,以便GetLastError返回错误?

来自分类Dev

对Laravel 4的Ajax请求返回200 OK,但方法始终返回失败

来自分类Dev

带有ARM模板的WebDeploy到Azure Functions失败,并显示ERROR_INSUFFICIENT_ACCESS_TO_SITE_FOLDER

来自分类Dev

重复调用CreateCompatibleBitmap()最终失败,并显示GetLastError()== 6

来自分类Dev

通过ssh执行的远程命令不会返回正确的返回码。返回错误代码始终为“ 0”,即使条件失败

来自分类Dev

FCM授权始终失败

来自分类Dev

OpenIdRelyingParty响应始终失败

来自分类Dev

多选验证始终失败

来自分类Dev

RTC授权始终失败

来自分类Dev

多选验证始终失败

来自分类Dev

jQuery请求始终失败

来自分类Dev

React.js:setState始终失败并在componentDidMount中返回未定义

来自分类Dev

curl shell命令始终返回错误状态0-即使输入错误失败

来自分类Dev

React.js:setState始终失败并在componentDidMount中返回未定义

Related 相关文章

  1. 1

    WideCharToMultiByte随机失败,错误为122 / ERROR_INSUFFICIENT_BUFFER

  2. 2

    GetTokenInformation在第一个调用中返回ERROR_INSUFFICIENT_BUFFER

  3. 3

    GetTokenInformation在第一个调用中返回ERROR_INSUFFICIENT_BUFFER

  4. 4

    使用WinInet :: InternetSetOption()始终返回false,而GetLastError()返回12018

  5. 5

    WIN API ReadFile()返回GetLastError()ERROR_INVALID_PARAMETER

  6. 6

    WIN API ReadFile()返回GetLastError()ERROR_INVALID_PARAMETER

  7. 7

    CreateWindowEx失败,GetLastError返回0;否则,返回0。在WindowProc中调用DefWindowProc

  8. 8

    OpenEvent,getlasterror返回2

  9. 9

    rc_status始终返回“失败”

  10. 10

    GetLastError返回ERROR_OPERATION_ABORTED时,GetOverlappedResult的lpNumberOfBytesTransfered参数有效吗?

  11. 11

    GetLastError返回ERROR_OPERATION_ABORTED时,GetOverlappedResult的lpNumberOfBytesTransfered参数有效吗?

  12. 12

    AWS DynamoDB iOS SDK静默失败,但始终返回成功状态

  13. 13

    Indy始终返回ResponseCode 200-即使登录失败

  14. 14

    DoModal返回-1 Getlasterror说无效的句柄

  15. 15

    InternetCrackUrl返回FALSE,GetLastError为120

  16. 16

    如何创建错误,以便GetLastError返回错误?

  17. 17

    对Laravel 4的Ajax请求返回200 OK,但方法始终返回失败

  18. 18

    带有ARM模板的WebDeploy到Azure Functions失败,并显示ERROR_INSUFFICIENT_ACCESS_TO_SITE_FOLDER

  19. 19

    重复调用CreateCompatibleBitmap()最终失败,并显示GetLastError()== 6

  20. 20

    通过ssh执行的远程命令不会返回正确的返回码。返回错误代码始终为“ 0”,即使条件失败

  21. 21

    FCM授权始终失败

  22. 22

    OpenIdRelyingParty响应始终失败

  23. 23

    多选验证始终失败

  24. 24

    RTC授权始终失败

  25. 25

    多选验证始终失败

  26. 26

    jQuery请求始终失败

  27. 27

    React.js:setState始终失败并在componentDidMount中返回未定义

  28. 28

    curl shell命令始终返回错误状态0-即使输入错误失败

  29. 29

    React.js:setState始终失败并在componentDidMount中返回未定义

热门标签

归档