Windows Vista Tips

Windows Vista Tips > Newsgroups > Windows Vista Drivers > can't delete USB registry items...

Reply
Thread Tools Display Modes

can't delete USB registry items...

 
 
Daniel Miller
Guest
Posts: n/a

 
      02-22-2005
I suspect that this is not quite the correct group for this question.
Unfortunately, it is the only MSDN Managed group which is related to the
DDK, so I'm stuck here; I hope someone from MS will assist me.

My specific issue that I have is this: we have a USB tester which can
operate on 12 USB devices at a time. Typically the user will start with
a raw part which will have vendor/product ID, but no other internal data.
They then perform a low-level format on the part, which assigns a device
serial number and other SCSI data. The problem is this:

Every time a USB device is inserted in a Windows machine, several
registry entries are created... at a minimum, there are:

HLKM:SYSTEM\CurrentControlSet\Enum\USB entries
HLKM:SYSTEM\CurrentControlSet\Enum\USBSTOR entries
HLKM:SYSTEM\CurrentControlSet\Control\DeviceClasse s\{deviceClassGUID}
entries

and several others. Each of these is hundreds of bytes in size.

This will create one set of data before the low-level format, and
*another* full set after the format, because the device now is recognized
by its serial number instead of its physical address.

Now, this is all just for ONE device. In a fully-operational production
environment, the user can put 15000 parts/day through the machine.

Just think of what the registry will look like after a week or two of
this, let alone a couple of years... the machine quickly starts slowing
down, and we know that eventually, when the registry gets too bloated,
Windows just stops functioning.

So I need to develop some method of stripping out old registry entries,
once I manage to determine all of the entries that I need to be concerned
about. I tried doing this with the registry management functions,
including either SHDeleteKey or RegDeleteKey, but I have two sets of
problems with this; the first is permissions, the second is that even
after I change the permissions, the delete-key functions still fail,
though I can manually delete the keys using RegEdit.

I've found that reg.exe can even delete these items, at least once I've
changed the permissions for Everyone; is there some way I can either get
source code for reg.exe, or at least find out how it is doing this??

Dan Miller

 
Reply With Quote
 
 
 
 
cristalink
Guest
Posts: n/a

 
      02-22-2005
> I've found that reg.exe can even delete these items, at least once I've
> changed the permissions for Everyone; is there some way I can either get
> source code for reg.exe, or at least find out how it is doing this??


RegDeleteKey cannot delete a key with subkeys. Try SHDeleteKey instead or
call RegDeleteKey recursively.

--
http://www.firestreamer.com - NTBackup to DVD and DV


"Daniel Miller" <> wrote in message
news:Xns960595E7EDB68dancarddupercom@207.46.248.16 ...
>I suspect that this is not quite the correct group for this question.
> Unfortunately, it is the only MSDN Managed group which is related to the
> DDK, so I'm stuck here; I hope someone from MS will assist me.
>
> My specific issue that I have is this: we have a USB tester which can
> operate on 12 USB devices at a time. Typically the user will start with
> a raw part which will have vendor/product ID, but no other internal data.
> They then perform a low-level format on the part, which assigns a device
> serial number and other SCSI data. The problem is this:
>
> Every time a USB device is inserted in a Windows machine, several
> registry entries are created... at a minimum, there are:
>
> HLKM:SYSTEM\CurrentControlSet\Enum\USB entries
> HLKM:SYSTEM\CurrentControlSet\Enum\USBSTOR entries
> HLKM:SYSTEM\CurrentControlSet\Control\DeviceClasse s\{deviceClassGUID}
> entries
>
> and several others. Each of these is hundreds of bytes in size.
>
> This will create one set of data before the low-level format, and
> *another* full set after the format, because the device now is recognized
> by its serial number instead of its physical address.
>
> Now, this is all just for ONE device. In a fully-operational production
> environment, the user can put 15000 parts/day through the machine.
>
> Just think of what the registry will look like after a week or two of
> this, let alone a couple of years... the machine quickly starts slowing
> down, and we know that eventually, when the registry gets too bloated,
> Windows just stops functioning.
>
> So I need to develop some method of stripping out old registry entries,
> once I manage to determine all of the entries that I need to be concerned
> about. I tried doing this with the registry management functions,
> including either SHDeleteKey or RegDeleteKey, but I have two sets of
> problems with this; the first is permissions, the second is that even
> after I change the permissions, the delete-key functions still fail,
> though I can manually delete the keys using RegEdit.
>
> I've found that reg.exe can even delete these items, at least once I've
> changed the permissions for Everyone; is there some way I can either get
> source code for reg.exe, or at least find out how it is doing this??
>
> Dan Miller
>



 
Reply With Quote
 
 
 
 
Daniel Miller
Guest
Posts: n/a

 
      02-22-2005
Right... I used SHDeleteKey on the top-level key, and and I used
RegDeleteKey recursively. They both failed, in the manner that I
described in my message below.

Dan

"cristalink" <> wrote in
news::

>> I've found that reg.exe can even delete these items, at least once
>> I've changed the permissions for Everyone; is there some way I can
>> either get source code for reg.exe, or at least find out how it is
>> doing this??

>
> RegDeleteKey cannot delete a key with subkeys. Try SHDeleteKey instead
> or call RegDeleteKey recursively.
>

--
http://www.firestreamer.com - NTBackup to DVD and DV


"Daniel Miller" <> wrote in message
news:Xns960595E7EDB68dancarddupercom@207.46.248.16 ...
>I suspect that this is not quite the correct group for this question.
> Unfortunately, it is the only MSDN Managed group which is related to
> the DDK, so I'm stuck here; I hope someone from MS will assist me.
>
> My specific issue that I have is this: we have a USB tester which can
> operate on 12 USB devices at a time. Typically the user will start
> with a raw part which will have vendor/product ID, but no other
> internal data. They then perform a low-level format on the part, which
> assigns a device serial number and other SCSI data. The problem is
> this:
>
> Every time a USB device is inserted in a Windows machine, several
> registry entries are created... at a minimum, there are:
>
> HLKM:SYSTEM\CurrentControlSet\Enum\USB entries
> HLKM:SYSTEM\CurrentControlSet\Enum\USBSTOR entries
> HLKM:SYSTEM\CurrentControlSet\Control\DeviceClasse s\{deviceClassGUID}
> entries
>
> and several others. Each of these is hundreds of bytes in size.
>
> This will create one set of data before the low-level format, and
> *another* full set after the format, because the device now is
> recognized by its serial number instead of its physical address.
>
> Now, this is all just for ONE device. In a fully-operational
> production environment, the user can put 15000 parts/day through the
> machine.
>
> Just think of what the registry will look like after a week or two of
> this, let alone a couple of years... the machine quickly starts
> slowing down, and we know that eventually, when the registry gets too
> bloated, Windows just stops functioning.
>
> So I need to develop some method of stripping out old registry
> entries, once I manage to determine all of the entries that I need to
> be concerned about. I tried doing this with the registry management
> functions, including either SHDeleteKey or RegDeleteKey, but I have
> two sets of problems with this; the first is permissions, the second
> is that even after I change the permissions, the delete-key functions
> still fail, though I can manually delete the keys using RegEdit.
>
> I've found that reg.exe can even delete these items, at least once
> I've changed the permissions for Everyone; is there some way I can
> either get source code for reg.exe, or at least find out how it is
> doing this??
>
> Dan Miller
>




 
Reply With Quote
 
cristalink
Guest
Posts: n/a

 
      02-22-2005
> They both failed, in the manner that I described in my message below.

Sorry, I could not find the description of "the manner" in your post.

I used SHDeleteKey and RegDeleteKey without any problem, as long as the
proper permissions are set for the Enum key. Other keys' permissions don't
need to be changed. What does GetLastError() say? What are the exact names
of the keys you are trying to delete? Did you try your code on any other key
to make sure it works at all?

--
http://www.firestreamer.com - NTBackup to DVD and DV


"Daniel Miller" <> wrote in message
news:Xns96059957C19B2dancarddupercom@207.46.248.16 ...
> Right... I used SHDeleteKey on the top-level key, and and I used
> RegDeleteKey recursively. They both failed, in the manner that I
> described in my message below.
>
> Dan
>
> "cristalink" <> wrote in
> news::
>
>>> I've found that reg.exe can even delete these items, at least once
>>> I've changed the permissions for Everyone; is there some way I can
>>> either get source code for reg.exe, or at least find out how it is
>>> doing this??

>>
>> RegDeleteKey cannot delete a key with subkeys. Try SHDeleteKey instead
>> or call RegDeleteKey recursively.
>>

> --
> http://www.firestreamer.com - NTBackup to DVD and DV
>
>
> "Daniel Miller" <> wrote in message
> news:Xns960595E7EDB68dancarddupercom@207.46.248.16 ...
>>I suspect that this is not quite the correct group for this question.
>> Unfortunately, it is the only MSDN Managed group which is related to
>> the DDK, so I'm stuck here; I hope someone from MS will assist me.
>>
>> My specific issue that I have is this: we have a USB tester which can
>> operate on 12 USB devices at a time. Typically the user will start
>> with a raw part which will have vendor/product ID, but no other
>> internal data. They then perform a low-level format on the part, which
>> assigns a device serial number and other SCSI data. The problem is
>> this:
>>
>> Every time a USB device is inserted in a Windows machine, several
>> registry entries are created... at a minimum, there are:
>>
>> HLKM:SYSTEM\CurrentControlSet\Enum\USB entries
>> HLKM:SYSTEM\CurrentControlSet\Enum\USBSTOR entries
>> HLKM:SYSTEM\CurrentControlSet\Control\DeviceClasse s\{deviceClassGUID}
>> entries
>>
>> and several others. Each of these is hundreds of bytes in size.
>>
>> This will create one set of data before the low-level format, and
>> *another* full set after the format, because the device now is
>> recognized by its serial number instead of its physical address.
>>
>> Now, this is all just for ONE device. In a fully-operational
>> production environment, the user can put 15000 parts/day through the
>> machine.
>>
>> Just think of what the registry will look like after a week or two of
>> this, let alone a couple of years... the machine quickly starts
>> slowing down, and we know that eventually, when the registry gets too
>> bloated, Windows just stops functioning.
>>
>> So I need to develop some method of stripping out old registry
>> entries, once I manage to determine all of the entries that I need to
>> be concerned about. I tried doing this with the registry management
>> functions, including either SHDeleteKey or RegDeleteKey, but I have
>> two sets of problems with this; the first is permissions, the second
>> is that even after I change the permissions, the delete-key functions
>> still fail, though I can manually delete the keys using RegEdit.
>>
>> I've found that reg.exe can even delete these items, at least once
>> I've changed the permissions for Everyone; is there some way I can
>> either get source code for reg.exe, or at least find out how it is
>> doing this??
>>
>> Dan Miller
>>

>
>
>



 
Reply With Quote
 
Daniel Miller
Guest
Posts: n/a

 
      02-23-2005
"cristalink" <> wrote in
news:#:

>> They both failed, in the manner that I described in my message below.

>
> Sorry, I could not find the description of "the manner" in your post.
>
> I used SHDeleteKey and RegDeleteKey without any problem, as long as
> the proper permissions are set for the Enum key. Other keys'
> permissions don't need to be changed. What does GetLastError() say?
> What are the exact names of the keys you are trying to delete? Did you
> try your code on any other key to make sure it works at all?
>

Whoops!!! I got SHDeleteKey to work!!
I was passing the full registry path+entry name to SHDeleteKey (which I
read was required for RegDeleteKey, and assumed was necessary for
SHDeleteKey as well). I had tried RegDeleteKey both ways, but hadn't tried
both with SHDeleteKey...

So, I was putting a test case together to respond to your previous message,
and SHDeleteKey works, if I pass *just* the name that was returned
previously by RegEnumKeyEx... how odd...

Thank you for your responses and questions, CristaLink!!

Dan Miller

 
Reply With Quote
 
Robert Marquardt
Guest
Posts: n/a

 
      02-23-2005
Never try to delete the registry entries yourself.
There are SetupDi functions to uninstall the device.

The easiest solution is to use a Mac or Linux.
Windows is not really suited for USB development or testing.
Check if a Mac mini with a USB hub is usable.
 
Reply With Quote
 
Maxim S. Shatskih
Guest
Posts: n/a

 
      02-24-2005
> So I need to develop some method of stripping out old registry entries,

Using image backup and rolling back is a great idea.

--
Maxim Shatskih, Windows DDK MVP
StorageCraft Corporation

http://www.storagecraft.com


 
Reply With Quote
 
Pavel A.
Guest
Posts: n/a

 
      02-25-2005
"Maxim S. Shatskih" wrote:
> Using image backup and rolling back is a great idea.


I's a great last resort to get a broken system back working...

We once made the following solution for this.
Printed the serial numbers as barcode on the QC routing slip.
Got a barcode scanner and *before* plugging next device, scanned it's serial
number into the testing app.
This program patched the serial into the enum registry key (duh!) - so when
the device was plugged in, it was detected as already installed.
Result: zero setup overhead and zero registry garbage.
Probably this idea can be adapted to case of multiple devices at once.

My 10 ag.,
--PA

 
Reply With Quote
 
Robert Marquardt
Guest
Posts: n/a

 
      02-25-2005
Pavel A. wrote:

> I's a great last resort to get a broken system back working...
>
> We once made the following solution for this.
> Printed the serial numbers as barcode on the QC routing slip.
> Got a barcode scanner and *before* plugging next device, scanned it's serial
> number into the testing app.
> This program patched the serial into the enum registry key (duh!) - so when
> the device was plugged in, it was detected as already installed.
> Result: zero setup overhead and zero registry garbage.
> Probably this idea can be adapted to case of multiple devices at once.


That is definitely idiotic. Why not use another OS?
Even Microsoft buys Macs once in a while.
 
Reply With Quote
 
 
 
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
USB hard drive won't work on a USB 2 port but will on a USB 1.1 port.Why? Gary Schnabl Windows Vista General Discussion 0 05-24-2007 08:29 AM
USB drive recognized with USB 1.1 but not with using USB 2 adapter Gary Schnabl Windows Vista Performance 0 05-22-2007 11:12 PM
Vista delete USB registry keys barry@canalrun.com Windows Vista Drivers 12 02-10-2007 01:15 PM
Re: How can I delete the registry key of device from registry on Vista Eliyas Yakub [MSFT] Windows Vista Drivers 3 12-04-2006 09:31 PM
Terminate a process, Delete a File, Delete a Registry Key Joshua Graham Scripting 0 02-17-2004 09:33 PM