指定LUP_FLUSHCACHE时,WSALookupServiceBegin崩溃

时间:2012-11-23 13:50:22

标签: bluetooth

我有一个C ++ / CLI DLL实现了一些由.NET应用程序加载的蓝牙功能。如果dll是用.NET 3.5编译的(应用程序也是如此),一切正常。

我已将dll更新为.NET 4.0(在VS 2010中)和平台工具集v100(VS2010);当然,应用程序已更新为相同版本的.NET框架。从那时起,如果我指定LUP_FLUSHCACHE标志,则WSALookupServiceBegin一直崩溃。

以下是代码:

HANDLE hLookup = 0;
WSAQUERYSET qs;
::memset(&qs, 0, sizeof(WSAQUERYSET));

// Start the lookup service
qs.dwSize = sizeof(WSAQUERYSET);
qs.dwNameSpace = NS_BTH;

iResult = ::WSALookupServiceBegin(&qs, LUP_CONTAINERS | LUP_RETURN_TYPE | LUP_RETURN_NAME | LUP_RETURN_ADDR | LUP_FLUSHCACHE, &hLookup); **<= Crash here**

指示的错误是-1073740791(0xc0000409)(如果检查ntstatus.h,则缓冲区溢出)。

我已尝试过所有内容,添加blob(以指定查询期)等。问题仍然存在。

正确初始化Winsock,连接(到BT SPP设备)工作正常。只有设备查询崩溃。

有没有人知道我为什么遇到这次崩溃?

谢谢, 阿列克

1 个答案:

答案 0 :(得分:0)

您是否尝试过将WSAQUERYSET初始化为零?

memset(&qs, 0, sizeof(WSAQUERYSET));

有时系统会将您的WSAQUERYSET初始化为垃圾 - 这可能导致您的缓冲区溢出。