예제 #1
0
int CEnumerator::OnAddUnifyingReceiver(DEVINST dnDevInst, HANDLE HidDeviceObject, const wchar_t *DevicePath, PHIDD_ATTRIBUTES Attributes, int PreparsedData, HIDP_CAPS *Capabilities, int a8)
{
	if(PowerUp(0, dnDevInst))
	{
		return 0;
	}
	CHidDevice* pHidDevice = new CHidDevice(dnDevInst);
	if(!pHidDevice)
	{
		return 0;
	}
	if(CEnumerator::LinkRawDeviceHandleWithDevice(pThis, (CReceiver *)pHidDevice, 0xFFu))
	{
		char 
			ReportID = GetReportID(PreparsedData, Capabilities);
		HDEVNOTIFY
			hDevNotify = GetRegisteredDevNotify(HidDeviceObject);
		if (pHidDevice->Setup(HidDeviceObject, ReportID, (int)Capabilities, Attributes, DevicePath, hDevNotify) )
		{
			pHidDevice->GenerateDeviceArrivalEvent();
			if(m_ModelID)
			{
				pThis->field_EC = CDevice::GetRawDeviceHandle((CReceiver *)pHidDevice);
				v11 = (DFU *)DFUController::GetSingleton();
				DFUController::UnknownY(v11, 6);
			}
		}
		return 1;
	}
	if(pHidDevice)
	{
		delete pHidDevice;
	}
	return 0;
}
예제 #2
0
CBaseTCPConnection * CEasyNetLinkService::CreateConnection(CIPAddress& RemoteAddress)
{
	if(m_IPList.GetCount())
	{
		bool IsMatch=false;
		for(size_t i=0;i<m_IPList.GetCount();i++)
		{
			if(m_IPList[i].IsMatch(RemoteAddress))
			{
				IsMatch=true;
				break;
			}
		}
		if(!IsMatch)
		{
			PrintNetLog(0xffffff,_T("连接[%s]不在IP列表中,被拒绝"),RemoteAddress.GetIPString());
			return NULL;
		}
	}
	CEasyNetLinkConnection * pConnection=NULL;
	if(m_pManager)
	{
		pConnection=m_pManager->CreateAcceptConnection(GetReportID());
		if(pConnection)
		{
			pConnection->SetMaxPacketSize(m_MaxPacketSize);
			pConnection->EnableReallocConnectionID(NeedReallocConnectionID());

		}
	}
	return pConnection;
}
예제 #3
0
int CEnumerator::OnAddReceiver(DEVINST dnDevInst, HANDLE HidDeviceObject, const wchar_t *DevicePath, HIDD_ATTRIBUTES *Attributes, int PreparsedData, HIDP_CAPS *Capabilities, int a8)
{
	pReceiver = 0;
	v31 = 0;
	v30 = 0;
	v26 = 0;
	DEVINST* pdnDevInst;
	DEVINST dnDevInst;
	m_pfnCM_Get_Parent(&pdnDevInst, dnDevInst, 0);
	DWORD a2 = PowerUp(0, (PDEVINST)pdnDevInst);
	if ( a2 )
	{
		pReceiver = (CReceiver *)GetDeviceHandle(a2);
		v30 = 1;
	}
	else
	{
		v29 = MatchProductIDs(pThis, Attributes->ProductID, (int)&v26);
		switch ( v29 )
		{
			case 4:                                   // CDJReceiver
				pReceiver = (CReceiver *)new CDJReceiver(pdnDevInst, 4);
			break;
			case 3:                                   // CEQuadReceiver
				pReceiver = (CReceiver *)new CEQuadReceiver(pdnDevInst, 3);
			break;
			case 2:                                   // CEQuadReceiver
				pReceiver = (CReceiver *)new CEQuadReceiver(pdnDevInst, 2);
			break;
			case 9:                                   // CDJGamingReceiver
				pReceiver = (CReceiver *)new CDJGamingReceiver(pdnDevInst, 9);
			break;
			case 0:                                   // CPalomarReceiver
				pReceiver = (CReceiver *)new CPalomarReceiver(pdnDevInst);
			break;
			case 10:                                  // CEQuadReceiver
				pReceiver = (CReceiver *)new CEQuadReceiver(pdnDevInst, 10);
			break;
			default:
			break;
		}
		if(pReceiver && !LinkRawDeviceHandleWithDevice(pReceiver, 0xFFu))
		{
			if(pReceiver)
			{
				delete pReceiver;
			}
			pReceiver = 0;
		}
	}
	if (pReceiver)
	{
		char
			ReportID = GetReportID(PreparsedData, Capabilities);
		if(!CHPPDevice::IsDeviceWithMatchingReportID((CHPPDevice *)&pReceiver->HPPDevice, ReportID))
		{
			HDEVNOTIFY
				hDevNotify = CEnumerator::GetRegisteredDevNotify(pThis, (int)HidDeviceObject);
			v31 = CHPPDevice::AppendHidDevice((CHPPDevice *)&pReceiver->HPPDevice,dnDevInst,(int)HidDeviceObject,DevicePath,Capabilities,ReportID,hDevNotify);
			v23 = CHPPDevice::AreDevicesActive((CHPPDevice *)&pReceiver->HPPDevice, v26);
			if ( v31 )
			{
				if ( v23 )
				{
					(*(void (__thiscall **)(CReceiver *, HIDD_ATTRIBUTES *))(pReceiver->__parent.vtbl + 0x2C))(pReceiver,Attributes);
					(*(void (__thiscall **)(CReceiver *))(pReceiver->__parent.vtbl + 4))(pReceiver);
					CReceiver::ReceiverScan(pReceiver);
				}
			}
		}
		if ( v30 )
		{
			pReceiver->DecrementRefCount();
		}
	}
	return v31;
}