Mira a ver si esto te sirve de ayuda:
Código Delphi
[-]
function GetDeviceName: String;
var
hKey: Windows.HKEY;
Device: ShortString;
Key: String;
Count, Len: Cardinal;
begin
Result:= '';
RegOpenKey(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Services\WpdUsb\Enum', hKey);
RegQueryValueEx(hKey, 'Count', nil, nil, @Count, @Len);
if Count = 1 then
begin
Len:= sizeof(Device);
RegQueryValueEx(hKey, '0', nil, nil, @Device[1], @Len);
Device[0]:= CHAR(Len-1);
Device:= Copy(Device, Pos('Vid', Device), Pos('Pid_', Device)+7 - Pos('Vid', Device)+1);
RegCloseKey(hKey);
Key:= 'SYSTEM\CurrentControlSet\Enum\USB\' + Device;
RegOpenKey(HKEY_LOCAL_MACHINE, PCHAR(Key), hKey);
RegEnumKey(hKey, 0, @Device[1], SizeOf(Device) - 1);
Device[0]:= CHAR(lstrlen(@Device));
RegCloseKey(hKey);
RegOpenKey(HKEY_LOCAL_MACHINE, PCHAR(Key + '\' + Device), hKey);
RegQueryValueEx(hKey, 'Service', nil, nil, @Device[1], @Len);
RegCloseKey(hKey);
Device[0]:= CHAR(Len-1);
RegOpenKey(HKEY_LOCAL_MACHINE, PCHAR('SYSTEM\CurrentControlSet\Services\' + Device), hKey);
RegCloseKey(hKey);
Key:= 'SYSTEM\CurrentControlSet\Services\' + Device + '\Enum';
RegOpenKey(HKEY_LOCAL_MACHINE, PCHAR(Key), hKey);
RegQueryValueEx(hKey, 'Count', nil, nil, @Count, @Len);
if Count = 1 then
begin
Len:= sizeof(Device);
RegQueryValueEx(hKey, '0', nil, nil, @Device[1], @Len);
Device[0]:= CHAR(Len-1); end;
RegCloseKey(hKey);
Key:= 'SYSTEM\CurrentControlSet\Enum\USB\' + Copy(Device, 5, Length(Device)-4) + '\Device Parameters';
RegOpenKey(HKEY_LOCAL_MACHINE, PCHAR(Key), hKey);
Len:= sizeof(Device);
RegQueryValueEx(hKey, 'SymbolicName', nil, nil, @Device[1], @Len);
RegCloseKey(hKey);
Device[0]:= CHAR(Len);
Result:= Device;
Result[2]:= '\';
Result[3]:= '.';
end
else
RegCloseKey(hKey);
end;
Su Uso:
Código Delphi
[-]
hFile:= CreateFile(PCHAR(GetDeviceName),
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
FILE_FLAG_WRITE_THROUGH or FILE_FLAG_NO_BUFFERING,
0);
Saludos.