|
这个函数,这里是开始调用出内存泄漏的地方
void EnumNetCards()
{
DWORD Status, Problem;
LPTSTR Buffer = NULL;
DWORD BufSize = 0;
// 返回所有设备信息
HDEVINFO hDevInfo = SetupDiGetClassDevs(NULL, NULL, 0, DIGCF_PRESENT | DIGCF_ALLCLASSES);
if (INVALID_HANDLE_VALUE == hDevInfo)
return;
SP_DEVINFO_DATA DeviceInfoData = { sizeof(SP_DEVINFO_DATA) };
//
// 枚举设备
//
for (DWORD DeviceId = 0;
SetupDiEnumDeviceInfo(hDevInfo, DeviceId, &DeviceInfoData);
DeviceId++)
{
// 获得设备的状态
if (CM_Get_DevNode_Status(&Status, &Problem, DeviceInfoData.DevInst, 0) != CR_SUCCESS)
continue;
// 获取设备类名
TCHAR szDevName[MAX_PATH] = _T("");
if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_CLASS, &Buffer, (PULONG)&BufSize))
{
lstrcpyn(szDevName, Buffer, MAX_PATH);
}
if (lstrcmp(szDevName, _T("Net")) == 0)
{
TCHAR szName[MAX_PATH] = _T("");
if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_ENUMERATOR_NAME, &Buffer, (PULONG)&BufSize))
{
lstrcpyn(szName, Buffer, MAX_PATH);
}
if (lstrcmp(szName, _T("ROOT")) != 0)
{
if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DRIVER, &Buffer, (PULONG)&BufSize))
{
lstrcpyn(szName, Buffer, MAX_PATH);
//获取设备描述
if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC, &Buffer, (PULONG)&BufSize))
{
lstrcpyn(szName, Buffer, MAX_PATH);
CString str1 = szName;
CString str2 = _T("");
str2 = str1.Mid(0, 11);
if (str2 == "Realtek USB")
{
if (bRet_server)
{
if (ControlDevice(DeviceId, hDevInfo))
{
printf("Successful\n");
}
else
{
printf("FAILED\n");
}
}
}
}
}
}
}
}
SetupDiDestroyDeviceInfoList(hDevInfo);
}
这里是内存泄漏的代码块:
CStringData* CAfxStringMgr::Allocate( int nChars, int nCharSize ) throw()
{
size_t nTotalSize;
CStringData* pData;
size_t nDataBytes;
ASSERT(nCharSize > 0);
if(nChars < 0)
{
ASSERT(FALSE);
return NULL;
}
nDataBytes = (nChars+1)*nCharSize;
nTotalSize = sizeof( CStringData )+nDataBytes;
pData = (CStringData*)malloc( nTotalSize );
if (pData == NULL)
return NULL;
pData->pStringMgr = this;
pData->nRefs = 1;
pData->nAllocLength = nChars;
pData->nDataLength = 0;
return pData;
}
|
上一篇: 内存泄漏,为什么是cstring的,到底啥原因造成的下一篇: if else if 不知为何出错
|