#include "stdafx.h"
#include "Http.h"
#pragma comment (lib,"Httpapi.lib")
int _tmain(int argc, _TCHAR* argv[])
{
HTTPAPI_VERSION HttpApiVersion = HTTPAPI_VERSION_1;
ULONG ret = NO_ERROR;
HRESULT hr = S_OK;
HTTPAPI_VERSION ver = HTTPAPI_VERSION_1;
ret = HttpInitialize(ver,HTTP_INITIALIZE_SERVER|HTTP_INITIALIZE_CONFIG,NULL);
if(ret!=NO_ERROR)
{
return 0;
}
HTTP_SERVICE_CONFIG_ID configId = HttpServiceConfigIPListenList;
HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY* query=NULL;
ULONG size=1000;
ULONG re = HttpQueryServiceConfiguration(NULL,configId,NULL,NULL,query,NULL,&size,NULL);
printf("re = %d",re);
getchar();
return 0;
}
此结果始终为122(ERROR_INSUFFICIENT_BUFFER)。我不知道共鸣。 这是HttpQueryServiceConfiguration函数的链接: https://msdn.microsoft.com/en-us/library/windows/desktop/aa364491
答案 0 :(得分:1)
根据您链接的引用,作为指向函数的指针传递的size
是pReturnLength
,这是输出参数,并且是
指向接收要在输出缓冲区中写入的字节数的变量的指针。
[强调我的]
您提供的缓冲区大小位于OutputConfigInfoLength
参数之前的参数中。当然,如果你想要写一些数据,你需要实际提供一个存储它的缓冲区,然后传递NULL
作为该参数(query
初始化为NULL
)。
另请注意,如果函数失败并显示ERROR_INSUFFICIENT_BUFFER
,则传递为pReturnLength
的变量将包含函数成功所需的实际长度。所以你应该做的是首先用零缓冲区大小调用它,以获得所需的大小,然后再次调用它来实际获取信息。
像
这样的东西HTTP_SERVICE_CONFIG_ID configId = HttpServiceConfigIPListenList;
ULONG size;
ULONG re = HttpQueryServiceConfiguration(NULL,configId,NULL,0,NULL,0,&size,NULL);
if (re != ERROR_INSUFFICIENT_BUFFER)
{
// We got an unknown error, handle it
}
else
{
// Allocate a buffer big enough for the data
HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY* query =
reinterpret_cast<HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY*>(new char[size]);
// Call the function again
re = HttpQueryServiceConfiguration(NULL,configId,NULL,0,query,size,&size,NULL);
// Here you should have the information you want in `query`
// Use the data
// Free the memory
delete[] query;
}