51 #include <nsIPropertyBag2.h>
52 #include <nsIWritablePropertyBag.h>
82 NS_ENSURE_SUCCESS(rv, rv);
85 DEVINST parentDevInst;
86 cfgRet = CM_Get_Parent(&parentDevInst, mDevInst, 0);
87 NS_ENSURE_TRUE(cfgRet == CR_SUCCESS, NS_ERROR_FAILURE);
90 WCHAR vetoName[MAX_PATH];
91 PNP_VETO_TYPE vetoType;
92 PRBool ejected = PR_FALSE;
93 for (
int i = 0;
i < 3;
i++) {
95 cfgRet = CM_Query_And_Remove_SubTreeW(parentDevInst,
100 if (cfgRet == CR_SUCCESS) {
106 cfgRet = CM_Request_Device_Eject(parentDevInst,
111 if (cfgRet == CR_SUCCESS) {
119 cfgRet = CM_Request_Device_Eject(parentDevInst,
124 NS_ENSURE_TRUE(cfgRet == CR_SUCCESS, NS_ERROR_FAILURE);
145 nsIPropertyBag* aProperties) :
152 LOG(
"Enter: sbIPDSysDevice::sbIPDSysDevice\n");
155 NS_ASSERTION(aProperties,
"aProperties is null");
166 LOG(
"Enter: sbIPDSysDevice::~sbIPDSysDevice\n");
183 nsCOMPtr<nsIPropertyBag2>
properties = do_QueryInterface(mProperties, &rv);
184 NS_ENSURE_SUCCESS(rv, rv);
185 nsCOMPtr<nsIWritablePropertyBag> writeProperties =
186 do_QueryInterface(mProperties, &rv);
187 NS_ENSURE_SUCCESS(rv, rv);
191 nsCAutoString nsDriveLetter;
192 rv = properties->GetPropertyAsACString(NS_LITERAL_STRING(
"DriveLetter"),
194 NS_ENSURE_SUCCESS(rv, rv);
195 driveLetter = nsDriveLetter.get()[0];
198 rv = GetDevInst(driveLetter, &mDevInst);
199 NS_ENSURE_SUCCESS(rv, rv);
202 nsAutoString mountPath;
203 mountPath.Assign(NS_ConvertUTF8toUTF16(nsDriveLetter));
204 mountPath.AppendLiteral(
":\\");
205 rv = writeProperties->SetProperty(NS_LITERAL_STRING(
"MountPath"),
207 NS_ENSURE_SUCCESS(rv, rv);
210 nsAutoString firewireGUID;
211 rv = GetFirewireGUID(firewireGUID);
212 NS_ENSURE_SUCCESS(rv, rv);
213 rv = writeProperties->SetProperty(NS_LITERAL_STRING(
"FirewireGUID"),
215 NS_ENSURE_SUCCESS(rv, rv);
218 rv = writeProperties->SetProperty
221 NS_ENSURE_SUCCESS(rv, rv);
224 NS_ENSURE_SUCCESS(rv, rv);
228 rv = writeProperties->SetProperty
231 NS_ENSURE_SUCCESS(rv, rv);
235 NS_ENSURE_SUCCESS(rv, rv);
266 sbIPDSysDevice::GetFirewireGUID(nsAString& aFirewireGUID)
272 cfgRet = CM_Get_Parent(&devInst, mDevInst, 0);
273 NS_ENSURE_TRUE(cfgRet == CR_SUCCESS, NS_ERROR_FAILURE);
276 WCHAR wDeviceID[256];
277 nsAutoString deviceID;
278 cfgRet = CM_Get_Device_IDW(devInst, wDeviceID,
sizeof (wDeviceID), 0);
279 NS_ENSURE_TRUE(cfgRet == CR_SUCCESS, NS_ERROR_FAILURE);
280 deviceID.Assign(wDeviceID);
283 PRInt32
pos = deviceID.RFindChar(
'\\');
284 NS_ENSURE_TRUE(pos != -1, NS_ERROR_FAILURE);
285 aFirewireGUID = Substring(deviceID, pos + 1, 16);
300 sbIPDSysDevice::GetDevInst(
char aDriveLetter,
304 NS_ASSERTION(aDevInst,
"aDevInst is null");
307 GUID guid = GUID_DEVINTERFACE_DISK;
312 nsAutoString devPath;
313 PR_snprintf(cDevPath,
sizeof(cDevPath),
"\\\\.\\%c:", aDriveLetter);
314 devPath.AssignLiteral(cDevPath);
318 rv = GetDevNum(devPath.get(), &targetDevNum);
319 NS_ENSURE_SUCCESS(rv, rv);
322 HDEVINFO devInfo = SetupDiGetClassDevsW
326 DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
327 NS_ENSURE_TRUE(devInfo != INVALID_HANDLE_VALUE, NS_ERROR_FAILURE);
328 sbIPDAutoDevInfo autoDevInfo(devInfo);
332 for (DWORD devIndex = 0; ; devIndex++) {
334 PSP_DEVICE_INTERFACE_DETAIL_DATA devIfDetailData;
335 SP_DEVINFO_DATA devInfoData;
336 rv = GetDevDetail(&devIfDetailData,
341 NS_ENSURE_TRUE(rv != NS_ERROR_NOT_AVAILABLE, NS_ERROR_NOT_AVAILABLE);
349 rv = GetDevNum(devIfDetailData->DevicePath, &devNum);
350 NS_ENSURE_SUCCESS(rv, rv);
353 if (devNum == targetDevNum) {
354 devInst = devInfoData.DevInst;
375 sbIPDSysDevice::GetDevNum(LPCTSTR aDevPath,
379 NS_ASSERTION(aDevPath,
"aDevPath is null");
380 NS_ASSERTION(aDevNum,
"aDevNum is null");
386 HANDLE devFile = CreateFileW(aDevPath,
388 FILE_SHARE_READ | FILE_SHARE_WRITE,
393 NS_ENSURE_TRUE(devFile != INVALID_HANDLE_VALUE, NS_ERROR_FAILURE);
394 sbIPDAutoFile autoDevFile(devFile);
397 STORAGE_DEVICE_NUMBER getDevNumParams;
399 success = DeviceIoControl(devFile,
400 IOCTL_STORAGE_GET_DEVICE_NUMBER,
404 sizeof(getDevNumParams),
407 NS_ENSURE_TRUE(success, NS_ERROR_FAILURE);
408 NS_ENSURE_TRUE(getDevNumParams.DeviceNumber != 0xFFFFFFFF,
412 *aDevNum = getDevNumParams.DeviceNumber;
432 sbIPDSysDevice::GetDevDetail(PSP_DEVICE_INTERFACE_DETAIL_DATA* aDevIfDetailData,
433 SP_DEVINFO_DATA* aDevInfoData,
439 NS_ASSERTION(aDevIfDetailData,
"aDevIfDetailData is null");
440 NS_ASSERTION(aDevInfoData,
"aDevInfoData is null");
441 NS_ASSERTION(aGUID,
"aGUID is null");
448 SP_DEVICE_INTERFACE_DATA devIfData;
449 ZeroMemory(&devIfData,
sizeof(SP_DEVICE_INTERFACE_DATA));
450 devIfData.cbSize =
sizeof(SP_DEVICE_INTERFACE_DATA);
451 success = SetupDiEnumDeviceInterfaces(aDevInfo,
457 return NS_ERROR_NOT_AVAILABLE;
461 success = SetupDiGetDeviceInterfaceDetailW(aDevInfo,
467 NS_ENSURE_TRUE(size > 0, NS_ERROR_FAILURE);
471 PSP_DEVICE_INTERFACE_DETAIL_DATA devIfDetailData;
472 devIfDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA) malloc(size);
473 NS_ENSURE_TRUE(devIfDetailData, NS_ERROR_OUT_OF_MEMORY);
476 devIfDetailData->cbSize =
sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
479 ZeroMemory(aDevInfoData,
sizeof(SP_DEVINFO_DATA));
480 aDevInfoData->cbSize =
sizeof(SP_DEVINFO_DATA);
481 success = SetupDiGetDeviceInterfaceDetailW(aDevInfo,
487 NS_ENSURE_SUCCESS(success, NS_ERROR_FAILURE);
490 *aDevIfDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)
491 autoDevIfDetailData.forget();
#define SB_PRLOG_SETUP(x)
nsCOMPtr< nsIArray > mProperties
#define SB_DEVICE_PROPERTY_MANUFACTURER
sbIPDSysDevice(const nsID &aControllerID, nsIPropertyBag *aProperties)
Songbird iPod Device Logging Definitions.
readonly attribute sbIDeviceProperties properties
#define SB_DEVICE_PROPERTY_SERIAL_NUMBER
#define SB_DEVICE_PROPERTY_MODEL
_getSelectedPageStyle s i