[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