BOOL OpenContext::StartControlTransfer(LPUKWD_CONTROL_TRANSFER_INFO lpTransferInfo) { MutexLocker lock(mMutex); DevicePtr dev (mDevice->GetDeviceList(), lpTransferInfo->lpDevice); if (!Validate(dev)) { SetLastError(ERROR_INVALID_HANDLE); return FALSE; } ControlTransfer* ct = new (std::nothrow) ControlTransfer( this, dev, lpTransferInfo); if (!ct) { ERROR_MSG((TEXT("USBKWrapperDrv!OpenContext::StartControlTransfer() - failed to create control transfer, aborting\r\n"))); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } BOOL ret = ct->Start(); mTransferList->PutTransfer(ct); ct = NULL; if (!ret) { ERROR_MSG((TEXT("USBKWrapperDrv!OpenContext::StartControlTransfer() - failed to start control transfer %d\r\n"), GetLastError())); return FALSE; } // Ownership of ct has passed to the transfer callback return TRUE; }
BOOL OpenContext::StartControlTransfer(LPUKWD_CONTROL_TRANSFER_INFO lpTransferInfo) { MutexLocker lock(mMutex); DevicePtr dev (mDevice->GetDeviceList(), lpTransferInfo->lpDevice); if (!Validate(dev)) { SetLastError(ERROR_INVALID_HANDLE); return FALSE; } TRANSFERLIFETIME_MSG((TEXT("USBKWrapperDrv!OpenContext::StartControlTransfer() with ") TEXT("bmRequestType 0x%02x, bRequest 0x%02x, wValue 0x%04x, wIndex 0x%04x, wLength %d, flags 0x%08x and size %d\r\n"), lpTransferInfo->Header.bmRequestType, lpTransferInfo->Header.bRequest, lpTransferInfo->Header.wValue, lpTransferInfo->Header.wIndex, lpTransferInfo->Header.wLength, lpTransferInfo->dwFlags, lpTransferInfo->dwDataBufferSize)); // Construct and start the control transfer ControlTransfer* ct = new (std::nothrow) ControlTransfer( this, dev, lpTransferInfo); if (!ct) { ERROR_MSG((TEXT("USBKWrapperDrv!OpenContext::StartControlTransfer() - failed to create control transfer, aborting\r\n"))); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } BOOL ret = ct->Start(); mTransferList->PutTransfer(ct); ct = NULL; if (!ret) { ERROR_MSG((TEXT("USBKWrapperDrv!OpenContext::StartControlTransfer() - failed to start control transfer %d\r\n"), GetLastError())); return FALSE; } // Ownership of ct has passed to the transfer callback return TRUE; }