51 #include <sbWindowsUtils.h>
58 #pragma warning (push)
59 #pragma warning (disable: 4200)
83 { 0x88, 0x15, 0x00, 0xA0, 0xC9, 0x06, 0xBE, 0xD8 }
110 PRUint8 aDescriptorType,
111 PRUint8 aDescriptorIndex,
112 PRUint16 aDescriptorIndex2,
113 PRUint16 aDescriptorLength,
117 NS_ENSURE_ARG_POINTER(aDeviceRef);
118 NS_ENSURE_ARG_POINTER(aDescriptor);
122 DEVINST devInst = deviceRef->
devInst;
123 HANDLE hubFile = deviceRef->
hubFile;
124 sbAutoHANDLE autoHubFile;
130 if (hubFile == INVALID_HANDLE_VALUE) {
133 NS_ENSURE_SUCCESS(rv, rv);
134 autoHubFile = hubFile;
139 DWORD requestSize =
sizeof(USB_DESCRIPTOR_REQUEST) + aDescriptorLength;
140 PUSB_DESCRIPTOR_REQUEST descriptorRequest =
141 static_cast<PUSB_DESCRIPTOR_REQUEST
>(NS_Alloc(requestSize));
142 NS_ENSURE_TRUE(descriptorRequest, NS_ERROR_OUT_OF_MEMORY);
146 descriptorRequest->ConnectionIndex = portIndex;
147 descriptorRequest->SetupPacket.wValue =
148 (aDescriptorType << 8) | aDescriptorIndex;
149 descriptorRequest->SetupPacket.wIndex = aDescriptorIndex2;
150 descriptorRequest->SetupPacket.wLength = aDescriptorLength;
154 success = DeviceIoControl(hubFile,
155 IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION,
162 NS_ENSURE_TRUE(success, NS_ERROR_FAILURE);
165 nsRefPtr<sbUSBDescriptor> descriptor =
168 NS_ENSURE_TRUE(descriptor, NS_ERROR_OUT_OF_MEMORY);
169 NS_ENSURE_TRUE(descriptor->Get(), NS_ERROR_OUT_OF_MEMORY);
172 descriptor.forget(aDescriptor);
176 NS_ENSURE_SUCCESS(rv, rv);
201 NS_ENSURE_ARG_POINTER(aDeviceRef);
210 NS_ENSURE_SUCCESS(rv, rv);
213 aDeviceRef->
devInst = aDevInst;
231 NS_ENSURE_ARG_POINTER(aDeviceRef);
234 if (aDeviceRef->
hubFile != INVALID_HANDLE_VALUE) {
235 CloseHandle(aDeviceRef->
hubFile);
236 aDeviceRef->
hubFile = INVALID_HANDLE_VALUE;
258 NS_ENSURE_ARG_POINTER(aHubFile);
259 NS_ENSURE_ARG_POINTER(aPortIndex);
272 FILE_SHARE_READ | FILE_SHARE_WRITE,
277 NS_ENSURE_SUCCESS(rv, rv);
278 sbAutoHANDLE autoHubFile(hubFile);
283 NS_ENSURE_SUCCESS(rv, rv);
286 *aHubFile = autoHubFile.forget();
287 *aPortIndex = portIndex;
308 NS_ENSURE_ARG_POINTER(aPortIndex);
317 TCHAR winDriverKey[256];
318 nsAutoString driverKey;
319 ULONG len =
sizeof(winDriverKey);
320 cr = CM_Get_DevNode_Registry_Property(aDevInst,
326 NS_ENSURE_TRUE(cr == CR_SUCCESS, NS_ERROR_FAILURE);
327 driverKey = winDriverKey;
330 USB_NODE_INFORMATION usbNodeInformation;
331 success = DeviceIoControl(aHubFile,
332 IOCTL_USB_GET_NODE_INFORMATION,
336 sizeof(usbNodeInformation),
339 NS_ENSURE_TRUE(success, NS_ERROR_FAILURE);
341 usbNodeInformation.u.HubInformation.HubDescriptor.bNumberOfPorts;
345 for (portIndex = 1; portIndex <= portCount; portIndex++) {
347 nsAutoString portDriverKey;
349 NS_ENSURE_SUCCESS(rv, rv);
352 if (driverKey.Equals(portDriverKey))
355 NS_ENSURE_TRUE(portIndex <= portCount, NS_ERROR_NOT_AVAILABLE);
358 *aPortIndex = portIndex;
378 nsAString& aDriverKey)
380 USB_NODE_CONNECTION_DRIVERKEY_NAME* driverKeyName;
386 aDriverKey.SetIsVoid(PR_TRUE);
390 USB_NODE_CONNECTION_DRIVERKEY_NAME probeDriverKeyName;
391 driverKeyName = &probeDriverKeyName;
392 driverKeyName->ConnectionIndex = aPortIndex;
393 requestSize =
sizeof(probeDriverKeyName);
394 success = DeviceIoControl(aHubFile,
395 IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME,
406 requestSize =
sizeof(USB_NODE_CONNECTION_DRIVERKEY_NAME) +
407 probeDriverKeyName.ActualLength;
409 static_cast<USB_NODE_CONNECTION_DRIVERKEY_NAME*>(NS_Alloc(requestSize));
410 NS_ENSURE_TRUE(driverKeyName, NS_ERROR_OUT_OF_MEMORY);
414 driverKeyName->ConnectionIndex = aPortIndex;
415 success = DeviceIoControl(aHubFile,
416 IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME,
423 NS_ENSURE_TRUE(success, NS_ERROR_FAILURE);
426 aDriverKey.Assign(driverKeyName->DriverKeyName);
450 NS_ENSURE_ARG_POINTER(aLUN);
456 nsAutoString deviceInstanceID;
458 NS_ENSURE_SUCCESS(rv, rv);
466 PRInt32 index = deviceInstanceID.RFind(NS_LITERAL_STRING(
"&"));
469 lun = Substring(deviceInstanceID, index + 1).ToInteger(&rv);
nsresult sbWinGetDeviceInstanceID(DEVINST aDevInst, nsAString &aDeviceInstanceID)
Songbird Windows Device Utilities Definitions.
static const GUID GUID_DEVINTERFACE_USB_HUB
nsresult sbWinUSBDeviceCloseRef(sbWinUSBDeviceRef *aDeviceRef)
nsresult sbWinCreateAncestorDeviceFile(HANDLE *aDevFile, DEVINST aDevInst, const GUID *aGUID, DWORD aDesiredAccess, DWORD aShareMode, LPSECURITY_ATTRIBUTES aSecurityAttributes, DWORD aCreationDisposition, DWORD aFlagsAndAttributes, HANDLE aTemplateFile)
nsresult sbWinUSBDeviceGetHubAndPort(DEVINST aDevInst, HANDLE *aHubFile, ULONG *aPortIndex)
nsresult sbWinUSBHubGetPortDriverKey(HANDLE aHubFile, ULONG aPortIndex, nsAString &aDriverKey)
Songbird Windows USB Device Utilities Definitions.
nsresult sbWinUSBDeviceOpenRef(DEVINST aDevInst, sbWinUSBDeviceRef *aDeviceRef)
nsresult sbUSBDeviceGetDescriptor(sbUSBDeviceRef *aDeviceRef, PRUint8 aDescriptorType, PRUint8 aDescriptorIndex, PRUint16 aDescriptorIndex2, PRUint16 aDescriptorLength, sbUSBDescriptor **aDescriptor)
nsresult sbWinUSBHubFindDevicePort(HANDLE aHubFile, DEVINST aDevInst, ULONG *aPortIndex)
nsresult sbWinUSBMSCGetLUN(DEVINST aDevInst, PRUint32 *aLUN)