Springen naar inhoud


- - - - -
Solved

Regopenkey Hkey_Current_User Error_Noaccess 998



  • Log in a.u.b. om te beantwoorden
Er zijn 7 reacties in dit onderwerp

#1 Vozzie

Vozzie

    Moderator

  • Leden
  • PipPipPipPipPipPipPip
  • 1855 berichten
    Laatst bezocht 12 jul 2017 13:15
Inzender

Geplaatst op 12 oktober 2012 - 18:39

Hi,

Weet iemand waarom RegOpenKey en RegOpenKeyEx falen voor HKEY_CURRENT_USER? Ik krijg "ERROR_NOACCESS" terug.

Heb al geprobeerd met RegOpenCurrentUser in plaats van de constante HKEY_CURRENT_USER maar heb hetzelfde probleem.

Heb al code gezien die gebruik maakt van LoadUserProfile maar ik wil wel goed begrijpen wat er zich afspeelt.

In VB.Net met managed code lukt dit anderzijds wel,...

(moet dus wel zelf nog wat research doen, dacht van vraag dit even...)


Mijn process draait, veronderstel ik, onder een user profile,... Dus moet de HKEY_CURRENT_USER toch bestaan,...?

#2 DieterVB

DieterVB

    Professional Developer

  • Leden
  • PipPipPipPip
  • 340 berichten
    Laatst bezocht 13 nov 2014 19:37
  • LocatieVlaamse Ardennen

Geplaatst op 12 oktober 2012 - 23:58

Zijn de Access Rights juist ingesteld? Op KEY_ALL_ACCESS of KEY_READ.


Visual Basic Code:
Declare Auto Function RegOpenKeyEx Lib "advapi32.dll" (
ByVal hKey As IntPtr,
ByVal lpSubKey As String,
ByVal ulOptions As Integer,
ByVal samDesired As Integer,
ByRef phkResult As Integer
) As Integer

Private Const KEY_READ As Integer = &H20019
Private Const KEY_ALL_ACCESS As Integer = &HF003F
Private Const HKEY_CURRENT_USER As Integer = &H80000001


Visual Basic Code:
Dim hSubKey As IntPtr
Dim result As Integer = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\ATI\ACE\AppDomains", 0, KEY_ALL_ACCESS, hSubKey)
MsgBox("Error: " & result)


Bovenstaande code werkt bij mij in vb.net.

Greedzzz

#3 Vozzie

Vozzie

    Moderator

  • Leden
  • PipPipPipPipPipPipPip
  • 1855 berichten
    Laatst bezocht 12 jul 2017 13:15
Inzender

Geplaatst op 14 oktober 2012 - 00:33

Hi,

Ga nog eens een poging wagen. Was aan een tooltje begonnen maar de lol was eraf als ik merkte dat ik de current_user ook nodig heb en deze dus niet kon openen. Ik zie dat je VB6 code als voorbeeld geeft, ik kan op de systemen waar het fout op liep niet in VB6 proberen. (ik kan het tooltje ook in .Net schrijven maar ik iets wat om een bepaalde onverklaarbare reden niet werkt laat me niet gauw los...). Alsook is het niet in .Net dat ik bezig ben, anders had ik het daar gepost...

Ik kan op eens proberen in VB6 maar als het daar wel met zal werken weet ik nog niet waarom het niet werkt in de omgeving waarmee ik probeer... Zal eens in C ook proberen anders om te zien of het daar dezelfde problemen geeft.


Kan je mij eens zeggen op welk systeem dat jij dit getest hebt. .../XP/Vista/7/8

Kan je misschien ook eens proberen met

"HKEY_CURRENT_USER\Software\Classes"

Alvast bedankt...

#4 DieterVB

DieterVB

    Professional Developer

  • Leden
  • PipPipPipPip
  • 340 berichten
    Laatst bezocht 13 nov 2014 19:37
  • LocatieVlaamse Ardennen

Geplaatst op 14 oktober 2012 - 01:20

Mijn programmeerstijl was inderdaad wat vb6 achtig :) maar het is geprogrammeerd in vb.net 2010.
K' heb het getest op win7 en 86x gecompileerd.

Ik heb het ook eens in C++ getest met "Software\\Classes":


Code:
#include <Windows.h>
#include <iostream>

int main()
{
HKEY hk;
int result = RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Classes", 0, KEY_ALL_ACCESS, &hk);
std::cout << result << std::endl;
system("pause");
return 0;
}



Werkt nog steeds bij mij.

Grtz

#5 Vozzie

Vozzie

    Moderator

  • Leden
  • PipPipPipPipPipPipPip
  • 1855 berichten
    Laatst bezocht 12 jul 2017 13:15
Inzender

Geplaatst op 14 oktober 2012 - 02:00

Hi,

Dus jouw result is 0. Brrr, ben bezig van het één op het ander en raakte hier nog niet aan toe.

Update, werkt bij mij ook vanuit C++. Bizar

Update2, werkt bij mij in een ander klein test programma ook in de omgeving waar ik in bezig was, ... Er moet dus iets anders fout zitten in dat ander programma...

Code:
TestHKCU Proc
	Local hKey:HKEY
	Local szBuffer[260]:TCHAR
szText szFmt, "%d",0
	Invoke RegOpenKeyEx, HKEY_CURRENT_USER, TextStr("Software\Classes"), 0, KEY_ALL_ACCESS, Addr hKey
	.If Eax != ERROR_SUCCESS
		Invoke wsprintfA, Addr szBuffer, Addr szFmt, Eax
		Invoke MessageBoxA, NULL, Addr szBuffer, TextAddrA("oops..."), MB_TOPMOST
	.Else
		Invoke MessageBoxA, NULL, TextStr("ok"), TextStr("ok"), MB_TOPMOST
		Invoke RegCloseKey, hKey
	.EndIf
	Ret
TestHKCU EndP
Groetjes! :)

#6 Vozzie

Vozzie

    Moderator

  • Leden
  • PipPipPipPipPipPipPip
  • 1855 berichten
    Laatst bezocht 12 jul 2017 13:15
Inzender

Geplaatst op 14 oktober 2012 - 02:37

"Gevonden"

Een "bug" in de omgeving waarin ik werk. Eerst eens de TFM doorzoeken om zeker te zijn dat het een bug is... Daarna bug rapporteren...

Het werkt in een "Classic" project maar niet in een "Visual" project.

Update: Werkt niet in een Visual project in UNICODE mode. Wel in "ANSI" mode...

Update2: Volgens mij heeft het te maken met de uitlijning van de unicode string. Als ik hem in de Data sectie declareer is deze uitgelijnd op 4. Als ik hem inline declareer met TextStr is deze uitgelijnd op 1!!! Denk dat de bug daaruit voortkomt,...

Update3: Een unicode string moet voor RegOpenKeyEx blijkbaar uitgelijnd zijn op 2. Heb een test gedaan die deze express uitlijnt op 1 en het loopt fout.

2 code samples om te reproduceren

Code:
HKEY hk;
HLOCAL mem = LocalAlloc(LPTR, 260);
char * pc = (char*)mem;
pc++;
wchar_t * pwc = (wchar_t*)pc;
lstrcpy(pwc, TEXT("Software\\Classes"));
int result = RegOpenKeyExW(HKEY_CURRENT_USER, pwc, 0, KEY_ALL_ACCESS, &hk);
if(result)
{
	TCHAR szMsg[100];
	_stprintf(szMsg, TEXT("Error %d"), result);
	MessageBox(NULL, szMsg, TEXT("oops..."), MB_TOPMOST | MB_IC&#111;nerror);
}
LocalFree(mem);

Code:
TestHKCU Proc Uses Ebx
	Local hKey:HKEY
	Local szBuffer[260]:TCHAR
szText szFmt,"%d",0
	Int 3
	Invoke LocalAlloc, LPTR, 260
	Mov Ebx, Eax
	And Eax, 3
	.If Eax
		Invoke MessageBox, NULL, TextStr("not aligned on 4"), TextStr("ok"), MB_TOPMOST Or MB_IC&#111;nerror
	.Else
		Invoke MessageBox, NULL, TextStr("aligned on 4"), TextStr("ok"), MB_TOPMOST
	.EndIf
	 ; misalign... :P
	Add Ebx, 1
	Invoke lstrcpy, Ebx, TextStr("Software\Classes")
	Invoke RegOpenKeyEx, HKEY_CURRENT_USER, Ebx , 0, KEY_ALL_ACCESS Or 0100H, Addr hKey
	.If Eax != ERROR_SUCCESS
		Invoke wsprintfA, Addr szBuffer, Addr szFmt, Eax
		Invoke MessageBoxA, NULL, Addr szBuffer, TextAddrA("oops..."), MB_TOPMOST
	.Else
		Invoke MessageBox, NULL, TextStr("ok"), TextStr("ok"), MB_TOPMOST
		Invoke RegCloseKey, hKey
	.EndIf
	Sub Ebx, 1
	Invoke LocalFree, Ebx
	Ret
TestHKCU EndP

Groetjes, en thx!

solved

btw: dacht vb6 omwille vh "Declare" statement. Ik gebruik "DllImport". Maar had het moeten zien aan de "Integer" ipv "Long" en IntPtr types...

(met zo'n bugs verliest nen mens veel tijd)

Update4: In de MSDN Library staat de community content leeg. Terwijl op Technet deze ingevuld is, en daar heeft iemand dezelfde bug gehad... Ik snap niet waar het verschil tussen libraries komt,...

Geen Community content: http://msdn.microsof...p/ms724897.aspx

Wel community content: http://lab.technet.m...y/ms724897.aspx

#7 DieterVB

DieterVB

    Professional Developer

  • Leden
  • PipPipPipPip
  • 340 berichten
    Laatst bezocht 13 nov 2014 19:37
  • LocatieVlaamse Ardennen

Geplaatst op 14 oktober 2012 - 16:02

Meestal gebruik ik ook DLLImport daarom dat ik het eens niet deed :P
Aan het programmeren in MASM zie ik. Welke IDE gebruik je?

Citeren

In de MSDN Library staat de community content leeg. Terwijl op Technet deze ingevuld is, en daar heeft iemand dezelfde bug gehad... Ik snap niet waar het verschil tussen libraries komt,...

Heb me dat ook al eens afgevraagd, Google weet het antwoord :) :
http://go4answers.we...sdn-118989.aspx

Technet is suppose to be geared toward the IT Professional roles (e.g.  DBA, Admin, etc.)  and the Development Center (MSDN) is suppose contain information more appropriate for developers.  But for SQL Sever, there's very little difference between the two sites:  SQL Server Books Online (the primary product documentation) is published to both.  There may be some differences in the types of white papers that get published to these sites though.

Groetjes

#8 Vozzie

Vozzie

    Moderator

  • Leden
  • PipPipPipPipPipPipPip
  • 1855 berichten
    Laatst bezocht 12 jul 2017 13:15
Inzender

Geplaatst op 14 oktober 2012 - 20:45

Bericht bekijkenDieterVB, op 14 oktober 2012 - 16:02, zei:

Aan het programmeren in MASM zie ik. Welke IDE gebruik je?

QEditor , EasyCode en OllyDbg en Visual Studio zijn mijn meest gebruikelijke tools


Bericht bekijkenDieterVB, op 14 oktober 2012 - 16:02, zei:

Heb me dat ook al eens afgevraagd, Google weet het antwoord :)

Wat het verschil was qua inhoud en doelpubliek dat wist ik al. Maar als ze naar dezelfde inhoud verwijzen, waarom heb je dan niet dezelfde "Community Content" op zowel technet als op de MSDN. Ze zouden naast enkel delen vd library op beide sites weer te geven ook de comments op beide weergeven,... Dan had ik dit "gedrag van RegOpenKeyEx" al gevonden

Groetjes





Ook met taq Solved voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[Solved] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)