[DUG] USB device information
Tom Munro Glass
gentoo at tmgcon.com
Fri Jul 22 16:29:14 NZST 2005
Thanks again Phil. I can now fetch a load of properties from the registry, but
unfortunately some of the data I need does not appear to be in the registry,
so I guess it's time to search for DeviceIOControl information.
Cheers,
Tom
Google hasn't found me any info on how to use
On Fri, 22 Jul 2005 11:55, Phil Middlemiss wrote:
> The arguments for the DeviceIOControl call will be specific to the
> device I think (at least the were with the Garmin devices), so it is
> probably a case of looking for an SDK for the hardware. But I don't
> think you need to necessarily call DeviceIOControl to get the
> information, you could probably get the information out of the registry
> using
> SetupDiGetDeviceRegistryProperty - one of the routines I use is below:
>
> function TGarminUSBDevice.GetRegistryPropertyString(PnPHandle: HDEVINFO;
> const DevData: TSPDevInfoData; Prop: DWORD): string;
> var
> bytesreturned: DWORD;
> regdatatype: DWORD;
> buffer: array [0..256] of Char;
> adevdata : TSPDevInfoData;
> begin
> bytesreturned := 0;
> regdatatype := 0;
> buffer[0] := #0;
> adevdata := DevData;
> SetupDiGetDeviceRegistryProperty(PnPHandle, adevdata, Prop,
> @regdatatype, PBYTE(@buffer[0]), SizeOf(buffer), @bytesreturned);
> result := buffer;
> end;
>
> which I then call like this:
> // primary information
> FCapabilities := GetRegistryPropertyDWord (APnPHandle,
> ADevData, SPDRP_CAPABILITIES);
> FClassDescr := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_CLASS);
> FClassGUID := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_CLASSGUID);
> FCompatibleIDs := GetRegistryPropertyStringList(APnPHandle,
> ADevData, SPDRP_COMPATIBLEIDS);
> FConfigFlags := GetRegistryPropertyDWord (APnPHandle,
> ADevData, SPDRP_CONFIGFLAGS);
> FDeviceDescr := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_DEVICEDESC);
> FDriver := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_DRIVER);
> FFriendlyName := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_FRIENDLYNAME);
> FHardwareID := GetRegistryPropertyStringList(APnPHandle,
> ADevData, SPDRP_HARDWAREID);
> FLowerFilters := GetRegistryPropertyStringList(APnPHandle,
> ADevData, SPDRP_LOWERFILTERS);
> FMfg := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_MFG);
> FUpperFilters := GetRegistryPropertyStringList(APnPHandle,
> ADevData, SPDRP_UPPERFILTERS);
> FService := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_SERVICE);
>
> // secondary information not all likely to exist for a HID device
> FAddress := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_ADDRESS);
> FBusNumber := GetRegistryPropertyDWord (APnPHandle,
> ADevData, SPDRP_BUSNUMBER);
> FBusType := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_BUSTYPEGUID);
> FCharacteristics := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_CHARACTERISTICS);
> FDevType := GetRegistryPropertyDWord (APnPHandle,
> ADevData, SPDRP_DEVTYPE);
> FEnumeratorName := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_ENUMERATOR_NAME);
> FExclusive := GetRegistryPropertyDWord (APnPHandle,
> ADevData, SPDRP_EXCLUSIVE);
> FLegacyBusType := GetRegistryPropertyDWord (APnPHandle,
> ADevData, SPDRP_LEGACYBUSTYPE);
> FLocationInfo := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_LOCATION_INFORMATION);
> FPhysDevObjName := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_PHYSICAL_DEVICE_OBJECT_NAME);
> FSecuritySDS := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_SECURITY_SDS);
> FUINumber := GetRegistryPropertyDWord (APnPHandle,
> ADevData, SPDRP_UI_NUMBER);
> FUINumberFormat := GetRegistryPropertyString (APnPHandle,
> ADevData, SPDRP_UI_NUMBER_DESC_FORMAT);
>
> I have similar versions for DWord and StringList aswell.
>
> Phil.
>
More information about the Delphi
mailing list