//=============================================================================================== // FUNCTION: Destructor // PURPOSE: Object cleanup. // CUnknown::~CUnknown() { MEMBERASSERT(); // If an object is curently wrapped, release the object. SetInterface(NULL); }
//=============================================================================================== // FUNCTION: Copy constructor // PURPOSE: Initializes object with an interface pointer. // CUnknown::CUnknown(PUNKNOWN pInterface) { MEMBERASSERT(); m_pInterface = NULL; m_hrLastError = S_OK; SetInterface(pInterface); }
///////////////////////////////////////////////////////////////// // HRESULT CBase::ObjectQI // ///////////////////////////////////////////////////////////////// HRESULT CBase::ObjectQI(REFIID riid, IUnknown** ppIUnknown) { HRESULT hr = S_OK; //IUnknown::QueryInterface XTESTC(hr = TRACE_QI(m_pIUnknown, riid, ppIUnknown, GetObjectName())); //We need to put the obtained interface in the appropiate member... if(ppIUnknown && *ppIUnknown) hr = SetInterface(riid, *ppIUnknown); CLEANUP: return hr; }
// IObjectWithSelection IFACEMETHODIMP SetSelection(IShellItemArray *aArray) { if (!aArray) { return E_FAIL; } SetInterface(&mShellItemArray, aArray); DWORD count = 0; aArray->GetCount(&count); if (!count) { return E_FAIL; } #ifdef SHOW_CONSOLE Log(L"SetSelection param count: %d", count); for (DWORD idx = 0; idx < count; idx++) { IShellItem* item = nullptr; if (SUCCEEDED(aArray->GetItemAt(idx, &item))) { LPWSTR str = nullptr; if (FAILED(item->GetDisplayName(SIGDN_FILESYSPATH, &str))) { if (FAILED(item->GetDisplayName(SIGDN_URL, &str))) { Log(L"Failed to get a shell item array item."); item->Release(); continue; } } item->Release(); Log(L"SetSelection param: '%s'", str); CoTaskMemFree(str); } } #endif IShellItem* item = nullptr; if (FAILED(aArray->GetItemAt(0, &item))) { return E_FAIL; } bool isFileSystem = false; if (!SetTargetPath(item) || !mTarget.GetLength()) { Log(L"SetTargetPath failed."); return E_FAIL; } item->Release(); Log(L"SetSelection target: %s", mTarget); return S_OK; }
///////////////////////////////////////////////////////////////// // HRESULT CBase::CreateObject // ///////////////////////////////////////////////////////////////// HRESULT CBase::CreateObject(CBase* pCSource, REFIID riid, IUnknown* pIUnkObject, DWORD dwCreateOpts) { //No-op... if(!pIUnkObject) return E_INVALIDARG; //Use exsiting Connection IUnknown* pIUnknown = NULL; if(dwCreateOpts == -1 /*Default*/) dwCreateOpts = GetOptions()->m_dwCreateOpts; HRESULT hr = S_OK; //Store the Parent Object... SAFE_RELEASE(m_pCParent); SAFE_ADDREF(pCSource); m_pCParent = pCSource; //First we QI for IID_IUnknown the object passed in. //NOTE: We do this before we call ReleaseObject since the caller of this //method could have passed in our own member variable (m_pIUnknown) to "recreate" the object. TRACE_QI(pIUnkObject, IID_IUnknown, &pIUnknown, GetObjectName()); //Release all Previous interfaces... ReleaseObject(1); //[MANDATORY] //Used the AddRef'd input as our IUnknown, since all interfaces inherit from IUnknown. m_pIUnknown = pIUnknown; //Now set the pointer pased into the appropiate interface member //NOTE: We already handled IUnknown above... if(riid != IID_IUnknown) SetInterface(riid, pIUnkObject); //Now AutoQI for derived object interfaces... AutoQI(dwCreateOpts); //Add this object to the Objects Window m_pCMainWindow->m_pCMDIObjects->m_pCObjTree->AddObject(pCSource, this); //CLEANUP: return hr; }
BOOL SetWlanOperationMode(tstring strGUID, tstring strMode) { strGUID = _T("{") + strGUID + _T("}"); GUID ChoiceGUID; if (myGUIDFromString(strGUID.c_str(), &ChoiceGUID) != TRUE) { _tprintf(_T("Error: SetWlanOperationMode::myGUIDFromString error\n")); return FALSE; } ULONG ulOperationMode = String2OperationMode(strMode); if (ulOperationMode == DOT11_OPERATION_MODE_UNKNOWN) { _tprintf(_T("Error: SetWlanOperationMode::String2OperationMode error, unknown mode: %s\n"), strMode.c_str()); return FALSE; } DWORD dwResult = SetInterface(wlan_intf_opcode_current_operation_mode, (PVOID*)&ulOperationMode, &ChoiceGUID); if (dwResult != ERROR_SUCCESS) { LPTSTR strErrorText = NULL; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwResult, 0, (PTSTR)&strErrorText, 0, NULL); if (strErrorText[_tcslen(strErrorText) - 2] == _T('\r') && strErrorText[_tcslen(strErrorText) - 1] == _T('\n')) { strErrorText[_tcslen(strErrorText) - 2] = 0x0; strErrorText[_tcslen(strErrorText) - 1] = 0x0; } _tprintf(_T("Error: SetWlanOperationMode::SetInterface error, error code = %d (%s)\n"), dwResult, strErrorText); return FALSE; } else { return TRUE; } }
// IObjectWithSite IFACEMETHODIMP SetSite(IUnknown *aUnkSite) { SetInterface(&mUnkSite, aUnkSite); return S_OK; }
//////////////////////////////////////////////////////////////////// // // CADsSearch // This is a convient C++ wrapper for IDirectorySearch // ///////////////////////////////////////////////////////////////////// CADsSearch::CADsSearch( IADs *pADs ) { CADsSearch(); SetInterface( pADs ); }
//------------------------------------------------------------------------------ /// Handles the given request if it is standard, otherwise STALLs it. /// \param pDriver Pointer to a USBDDriver instance. /// \param pRequest Pointer to a USBGenericRequest instance. //------------------------------------------------------------------------------ void USBDDriver_RequestHandler( USBDDriver *pDriver, const USBGenericRequest *pRequest) { unsigned char cfgnum; unsigned char infnum; unsigned char eptnum; unsigned char setting; unsigned char type; unsigned char indexDesc; unsigned int length; unsigned int address; TRACE_INFO_WP("Std "); // Check request code switch (USBGenericRequest_GetRequest(pRequest)) { case USBGenericRequest_GETDESCRIPTOR: TRACE_INFO_WP("gDesc "); // Send the requested descriptor type = USBGetDescriptorRequest_GetDescriptorType(pRequest); indexDesc = USBGetDescriptorRequest_GetDescriptorIndex(pRequest); length = USBGenericRequest_GetLength(pRequest); GetDescriptor(pDriver, type, indexDesc, length); break; case USBGenericRequest_SETADDRESS: TRACE_INFO_WP("sAddr "); // Sends a zero-length packet and then set the device address address = USBSetAddressRequest_GetAddress(pRequest); USBD_Write(0, 0, 0, (TransferCallback) USBD_SetAddress, (void *) address); break; case USBGenericRequest_SETCONFIGURATION: TRACE_INFO_WP("sCfg "); // Set the requested configuration cfgnum = USBSetConfigurationRequest_GetConfiguration(pRequest); SetConfiguration(pDriver, cfgnum); break; case USBGenericRequest_GETCONFIGURATION: TRACE_INFO_WP("gCfg "); // Send the current configuration number GetConfiguration(pDriver); break; case USBGenericRequest_GETSTATUS: TRACE_INFO_WP("gSta "); // Check who is the recipient switch (USBGenericRequest_GetRecipient(pRequest)) { case USBGenericRequest_DEVICE: TRACE_INFO_WP("Dev "); // Send the device status GetDeviceStatus(pDriver); break; case USBGenericRequest_ENDPOINT: TRACE_INFO_WP("Ept "); // Send the endpoint status eptnum = USBGenericRequest_GetEndpointNumber(pRequest); GetEndpointStatus(eptnum); break; default: TRACE_WARNING( "USBDDriver_RequestHandler: Unknown recipient (%d)\n\r", USBGenericRequest_GetRecipient(pRequest)); USBD_Stall(0); } break; case USBGenericRequest_CLEARFEATURE: TRACE_INFO_WP("cFeat "); // Check which is the requested feature switch (USBFeatureRequest_GetFeatureSelector(pRequest)) { case USBFeatureRequest_ENDPOINTHALT: TRACE_INFO_WP("Hlt "); // Unhalt endpoint and send a zero-length packet USBD_Unhalt(USBGenericRequest_GetEndpointNumber(pRequest)); USBD_Write(0, 0, 0, 0, 0); break; case USBFeatureRequest_DEVICEREMOTEWAKEUP: TRACE_INFO_WP("RmWU "); // Disable remote wake-up and send a zero-length packet pDriver->isRemoteWakeUpEnabled = 0; USBD_Write(0, 0, 0, 0, 0); break; default: TRACE_WARNING( "USBDDriver_RequestHandler: Unknown feature selector (%d)\n\r", USBFeatureRequest_GetFeatureSelector(pRequest)); USBD_Stall(0); } break; case USBGenericRequest_SETFEATURE: TRACE_INFO_WP("sFeat "); // Check which is the selected feature switch (USBFeatureRequest_GetFeatureSelector(pRequest)) { case USBFeatureRequest_DEVICEREMOTEWAKEUP: TRACE_INFO_WP("RmWU "); // Enable remote wake-up and send a ZLP pDriver->isRemoteWakeUpEnabled = 1; USBD_Write(0, 0, 0, 0, 0); break; case USBFeatureRequest_ENDPOINTHALT: TRACE_INFO_WP("Halt "); // Halt endpoint USBD_Halt(USBGenericRequest_GetEndpointNumber(pRequest)); USBD_Write(0, 0, 0, 0, 0); break; #if defined(CHIP_USB_UDPHS) || defined(CHIP_USB_OTGHS) case USBFeatureRequest_TESTMODE: // 7.1.20 Test Mode Support if ((USBGenericRequest_GetType(pRequest) == USBGenericRequest_DEVICE) && ((USBGenericRequest_GetIndex(pRequest) & 0x000F) == 0)) { // Handle test request USBDDriver_Test(USBFeatureRequest_GetTestSelector(pRequest)); } else { USBD_Stall(0); } break; #endif #if defined(CHIP_USB_OTGHS) case USBFeatureRequest_OTG_B_HNP_ENABLE: TRACE_INFO_WP("OTG_B_HNP_ENABLE "); otg_features_supported |= 1<<USBFeatureRequest_OTG_B_HNP_ENABLE; USBD_Write(0, 0, 0, 0, 0); break; case USBFeatureRequest_OTG_A_HNP_SUPPORT: TRACE_INFO_WP("OTG_A_HNP_SUPPORT "); otg_features_supported |= 1<<USBFeatureRequest_OTG_A_HNP_SUPPORT; USBD_Write(0, 0, 0, 0, 0); break; case USBFeatureRequest_OTG_A_ALT_HNP_SUPPORT: TRACE_INFO_WP("OTG_A_ALT_HNP_SUPPORT "); otg_features_supported |= 1<<USBFeatureRequest_OTG_A_ALT_HNP_SUPPORT; USBD_Write(0, 0, 0, 0, 0); break; #endif default: TRACE_WARNING( "USBDDriver_RequestHandler: Unknown feature selector (%d)\n\r", USBFeatureRequest_GetFeatureSelector(pRequest)); USBD_Stall(0); } break; case USBGenericRequest_SETINTERFACE: TRACE_INFO_WP("sInterface "); infnum = USBInterfaceRequest_GetInterface(pRequest); setting = USBInterfaceRequest_GetAlternateSetting(pRequest); SetInterface(pDriver, infnum, setting); break; case USBGenericRequest_GETINTERFACE: TRACE_INFO_WP("gInterface "); infnum = USBInterfaceRequest_GetInterface(pRequest); GetInterface(pDriver, infnum); break; default: TRACE_WARNING( "USBDDriver_RequestHandler: Unknown request code (%d)\n\r", USBGenericRequest_GetRequest(pRequest)); USBD_Stall(0); } }
// IObjectWithSite IFACEMETHODIMP SetSite(IUnknown *punkSite) { SetInterface(&_punkSite, punkSite); return S_OK; }
// IObjectWithSelection IFACEMETHODIMP SetSelection(IShellItemArray *psia) { SetInterface(&_psia, psia); return S_OK; }
/** * Handles the given request if it is standard, otherwise STALLs it. * \param pDriver Pointer to a USBDDriver instance. * \param pRequest Pointer to a USBGenericRequest instance. */ void USBDDriver_RequestHandler( USBDDriver *pDriver, const USBGenericRequest *pRequest) { uint8_t cfgnum; uint8_t infnum; uint8_t eptnum; uint8_t setting; uint8_t type; uint8_t indexDesc; uint32_t length; uint32_t address; TRACE_INFO_WP("Std "); /* Check request code */ switch (USBGenericRequest_GetRequest(pRequest)) { case USBGenericRequest_GETDESCRIPTOR: TRACE_INFO_WP("gDesc "); /* Send the requested descriptor */ type = USBGetDescriptorRequest_GetDescriptorType(pRequest); indexDesc = USBGetDescriptorRequest_GetDescriptorIndex(pRequest); length = USBGenericRequest_GetLength(pRequest); GetDescriptor(pDriver, type, indexDesc, length); break; case USBGenericRequest_SETADDRESS: TRACE_INFO_WP("sAddr "); /* Sends a zero-length packet and then set the device address */ address = USBSetAddressRequest_GetAddress(pRequest); USBD_Write(0, 0, 0, (TransferCallback) USBD_SetAddress, (void *) address); break; case USBGenericRequest_SETCONFIGURATION: TRACE_INFO_WP("sCfg "); /* Set the requested configuration */ cfgnum = USBSetConfigurationRequest_GetConfiguration(pRequest); SetConfiguration(pDriver, cfgnum); break; case USBGenericRequest_GETCONFIGURATION: TRACE_INFO_WP("gCfg "); /* Send the current configuration number */ GetConfiguration(pDriver); break; case USBGenericRequest_GETSTATUS: TRACE_INFO_WP("gSta "); /* Check who is the recipient */ switch (USBGenericRequest_GetRecipient(pRequest)) { case USBGenericRequest_DEVICE: TRACE_INFO_WP("Dev "); /* Send the device status */ GetDeviceStatus(pDriver); break; case USBGenericRequest_ENDPOINT: TRACE_INFO_WP("Ept "); /* Send the endpoint status */ eptnum = USBGenericRequest_GetEndpointNumber(pRequest); GetEndpointStatus(eptnum); break; default: TRACE_WARNING( "USBDDriver_RequestHandler: Unknown recipient (%d)\n\r", USBGenericRequest_GetRecipient(pRequest)); USBD_Stall(0); } break; case USBGenericRequest_CLEARFEATURE: TRACE_INFO_WP("cFeat "); /* Check which is the requested feature */ switch (USBFeatureRequest_GetFeatureSelector(pRequest)) { case USBFeatureRequest_ENDPOINTHALT: TRACE_INFO_WP("Hlt "); /* Unhalt endpoint and send a zero-length packet */ USBD_Unhalt(USBGenericRequest_GetEndpointNumber(pRequest)); USBD_Write(0, 0, 0, 0, 0); break; case USBFeatureRequest_DEVICEREMOTEWAKEUP: TRACE_INFO_WP("RmWU "); /* Disable remote wake-up and send a zero-length packet */ pDriver->isRemoteWakeUpEnabled = 0; USBD_Write(0, 0, 0, 0, 0); break; default: TRACE_WARNING( "USBDDriver_RequestHandler: Unknown feature selector (%d)\n\r", USBFeatureRequest_GetFeatureSelector(pRequest)); USBD_Stall(0); } break; case USBGenericRequest_SETFEATURE: TRACE_INFO_WP("sFeat "); /* Check which is the selected feature */ switch (USBFeatureRequest_GetFeatureSelector(pRequest)) { case USBFeatureRequest_DEVICEREMOTEWAKEUP: TRACE_INFO_WP("RmWU "); /* Enable remote wake-up and send a ZLP */ pDriver->isRemoteWakeUpEnabled = 1; USBD_Write(0, 0, 0, 0, 0); break; case USBFeatureRequest_ENDPOINTHALT: TRACE_INFO_WP("Halt "); /* Halt endpoint */ USBD_Halt(USBGenericRequest_GetEndpointNumber(pRequest)); USBD_Write(0, 0, 0, 0, 0); break; case USBFeatureRequest_OTG_B_HNP_ENABLE: TRACE_INFO_WP("OTG_B_HNP_ENABLE "); pDriver->otg_features_supported |= 1<<USBFeatureRequest_OTG_B_HNP_ENABLE; USBD_Write(0, 0, 0, 0, 0); break; case USBFeatureRequest_OTG_A_HNP_SUPPORT: TRACE_INFO_WP("OTG_A_HNP_SUPPORT "); pDriver->otg_features_supported |= 1<<USBFeatureRequest_OTG_A_HNP_SUPPORT; USBD_Write(0, 0, 0, 0, 0); break; case USBFeatureRequest_OTG_A_ALT_HNP_SUPPORT: TRACE_INFO_WP("OTG_A_ALT_HNP_SUPPORT "); pDriver->otg_features_supported |= 1<<USBFeatureRequest_OTG_A_ALT_HNP_SUPPORT; USBD_Write(0, 0, 0, 0, 0); break; default: TRACE_WARNING( "USBDDriver_RequestHandler: Unknown feature selector (%d)\n\r", USBFeatureRequest_GetFeatureSelector(pRequest)); USBD_Stall(0); } break; case USBGenericRequest_SETINTERFACE: TRACE_INFO_WP("sInterface "); infnum = USBInterfaceRequest_GetInterface(pRequest); setting = USBInterfaceRequest_GetAlternateSetting(pRequest); SetInterface(pDriver, infnum, setting); break; case USBGenericRequest_GETINTERFACE: TRACE_INFO_WP("gInterface "); infnum = USBInterfaceRequest_GetInterface(pRequest); GetInterface(pDriver, infnum); break; default: TRACE_WARNING( "USBDDriver_RequestHandler: Unknown request code (%d)\n\r", USBGenericRequest_GetRequest(pRequest)); USBD_Stall(0); } }
int MainInteractive() { HANDLE hClient = NULL; WLAN_INTERFACE_INFO sInfo[64]; RPC_TSTR strGuid = NULL; TCHAR szBuffer[256]; DWORD dwRead; if (OpenHandleAndCheckVersion(&hClient) != ERROR_SUCCESS) { _tsystem(_T("PAUSE")); return -1; } UINT nCount = EnumInterface(hClient, sInfo); for (UINT i = 0; i < nCount; ++i) { if (UuidToString(&sInfo[i].InterfaceGuid, &strGuid) == RPC_S_OK) { ULONG ulOperationMode = -1; PULONG pOperationMode; DWORD dwResult = GetInterface(wlan_intf_opcode_current_operation_mode, (PVOID*)&pOperationMode, &sInfo[i].InterfaceGuid); if (dwResult != ERROR_SUCCESS) { _tprintf(_T("GetInterface error, error code = %d\n"), dwResult); _tsystem(_T("PAUSE")); } else { ulOperationMode = *pOperationMode; WlanFreeMemory(pOperationMode); } _tprintf(_T("%d. %s\n\tName: %s\n\tDescription: %s\n\tState: %s\n\tOperation Mode: %s\n"), i, strGuid, getAdapterNameFromGuid((TCHAR*) strGuid).c_str(), sInfo[i].strInterfaceDescription, GetInterfaceStateString(sInfo[i].isState), GetInterfaceOperationModeString(ulOperationMode)); RpcStringFree(&strGuid); } } UINT nChoice = 0; GUID ChoiceGUID; LPGUID pChoiceGUID = NULL; _tprintf(_T("Enter the choice (0, 1,..) of the wireless card you want to operate on:\n")); if (ReadConsole(GetStdHandle(STD_INPUT_HANDLE), szBuffer, _countof(szBuffer), &dwRead, NULL) == FALSE) { _putts(_T("Error input.")); _tsystem(_T("PAUSE")); return -1; } szBuffer[dwRead] = 0; // TCHAR *aaa = _T("42dfd47a-2764-43ac-b58e-3df569c447da"); // dwRead = sizeof(aaa); TCHAR buf[256]; _stprintf_s(buf, 256, _T("{%s}"), szBuffer); if (dwRead > 32) { if (myGUIDFromString(buf, &ChoiceGUID) != TRUE) { _tprintf(_T("UuidFromString error, error code = %d\n"), -1); _tsystem(_T("PAUSE")); } else { pChoiceGUID = &ChoiceGUID; } } else { nChoice = _ttoi(szBuffer); if (nChoice > nCount) { _putts(_T("No such index.")); _tsystem(_T("PAUSE")); return -1; } pChoiceGUID = &sInfo[nChoice].InterfaceGuid; } UINT nSTate = 0; ULONG ulOperationMode = -1; _tprintf(_T("Enter the operation mode (0, 1 or 2) you want to switch to for the chosen wireless card:\n")); _tprintf(_T("0: Extensible Station (ExtSTA)\n1: Network Monitor (NetMon)\n2: Extensible Access Point (ExtAP)\n")); if (ReadConsole(GetStdHandle(STD_INPUT_HANDLE), szBuffer, _countof(szBuffer), &dwRead, NULL) == FALSE) { _putts(_T("Error input.")); _tsystem(_T("PAUSE")); return -1; } szBuffer[dwRead] = 0; nSTate = _ttoi(szBuffer); if (nSTate != 0 && nSTate != 1 && nSTate != 2) { _putts(_T("Only 0, 1 and 2 are valid inputs.")); _tsystem(_T("PAUSE")); return -1; } if (nSTate == 0) { ulOperationMode = DOT11_OPERATION_MODE_EXTENSIBLE_STATION; } else if (nSTate == 1) { ulOperationMode = DOT11_OPERATION_MODE_NETWORK_MONITOR; } else // nSTate == 2 { ulOperationMode = DOT11_OPERATION_MODE_EXTENSIBLE_AP; } DWORD dwResult = SetInterface(wlan_intf_opcode_current_operation_mode, (PVOID*)&ulOperationMode, pChoiceGUID); if (dwResult != ERROR_SUCCESS) { _tprintf(_T("SetInterface error, error code = %d\n"), dwResult); _tsystem(_T("PAUSE")); } else { _tprintf(_T("SetInterface success!\n")); } return 0; }
/***************************************************************************//** * @brief Processes Standard Request (Chapter 9 Command) * @return Status of request (type @ref USB_Status_TypeDef) * @note This function takes no parameters, but it uses the setup command * stored in @ref myUsbDevice.setup. ******************************************************************************/ USB_Status_TypeDef USBDCH9_SetupCmd(void) { USB_Status_TypeDef status = USB_STATUS_OK; switch (myUsbDevice.setup.bRequest) { case GET_STATUS: status = GetStatus(); break; case CLEAR_FEATURE: status = ClearFeature(); break; case SET_FEATURE: status = SetFeature(); break; case SET_ADDRESS: status = SetAddress(); break; case GET_DESCRIPTOR: status = GetDescriptor(); break; case GET_CONFIGURATION: status = GetConfiguration(); break; case SET_CONFIGURATION: status = SetConfiguration(); break; case GET_INTERFACE: status = GetInterface(); break; case SET_INTERFACE: status = SetInterface(); break; // case GET_MS_DESCRIPTOR: // status = HandleMsRequest(); // break; default: status = USB_STATUS_REQ_ERR; break; } // Reset index to 0 in case one of the above commands modified it USB_SetIndex(0); // If the command resulted in an error, send a procedural stall if (status == USB_STATUS_REQ_ERR) { SendEp0Stall(); } return status; }