How to enumerate registry keys / SeTakeOwnershipPrivilege

Windows specific forum
dangerfreak
User
User
Posts: 80
Joined: Tue Jan 12, 2010 4:56 pm

How to enumerate registry keys / SeTakeOwnershipPrivilege

Post by dangerfreak »

I want to write some sort of monitoring program and that's why I'd like to enumerate all subkeys of a given registry key, e.g. all autostart keys in "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run". Unfortunately my program doesn't work for this subkey (it only works for other keys) and I know it has something to do with ownership ("SeTakeOwnershipPrivilege"). Though I know what the problem is, I don't know how to fix that, I already searched Google for hours, but I didn't find anything I can use or understand.

This is my code:

Code: Select all

EnableExplicit

Declare main()

main()

Procedure main()
   Define result.l
   Define regKey.l
   Define newSubkey$
   Define bufferSize.l
   Define keyCounter.l
   
   ; ist der benutzer ein admin? dann:
   result=IsUserAnAdmin_()
   If result=0
      Debug("error, please restart as admin")
      ProcedureReturn
   EndIf
      
   result=RegOpenKeyEx_(#HKEY_CURRENT_USER,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run\",0,#KEY_READ,@regKey) ; 
   If result<>#ERROR_SUCCESS
      Debug("error opening key")
   Else
      keyCounter=0
      Repeat 
         newSubkey$=Space(256)
         bufferSize=256
         result=RegEnumKeyEx_(regKey,keyCounter,@newSubkey$,@bufferSize,0,0,0,0)
         If result<>#ERROR_SUCCESS
            Debug("error enum")
            Break
         Else
            Debug(newSubkey$)
            keyCounter+1
         EndIf
      ForEver   
      RegCloseKey_(regKey)
   EndIf
EndProcedure
What exactly do I have to add? Can you help me please?
AZJIO
Addict
Addict
Posts: 2183
Joined: Sun May 14, 2017 1:48 am

Re: How to enumerate registry keys / SeTakeOwnershipPrivilege

Post by AZJIO »

not Keys, but Values (RegEnumValue_())

Code: Select all

; ts-soft
; https://www.purebasic.fr/english/viewtopic.php?f=12&t=56204
XIncludeFile "Registry.pbi"

Define count, i, Key$

Key$ = "Software\Microsoft\Windows\CurrentVersion\Run"
KEY = #HKEY_CURRENT_USER

count = Registry::CountSubValues(KEY, Key$)
For i = 0 To count - 1
    Debug Registry::ListSubValue(KEY, Key$, i)
Next

Debug #CRLF$

UseModule Registry

Key$ = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
KEY = #HKEY_LOCAL_MACHINE

count = CountSubValues(KEY, Key$)
For i = 0 To count - 1
    Debug ListSubValue(KEY, Key$, i)
Next
You don't need to create variables in the loop, just create them once above the loop.

Code: Select all

newSubkey$=Space(256)
bufferSize=256
reference
dangerfreak
User
User
Posts: 80
Joined: Tue Jan 12, 2010 4:56 pm

Re: How to enumerate registry keys / SeTakeOwnershipPrivilege

Post by dangerfreak »

:shock: Sometimes the solution can be so easy, I totally mixed it up :oops: . Thanks for your help!
Post Reply