c ++ - Hvorfor eksisterer RegCloseKey (når CloseHandle synes at udføre den samme funktion)?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg kiggede på docs for DuplicateHandle den anden dag og bemærkede, at DuplicateHandle kan kopiere registreringsnøglehåndtag (HKEY s). Læser op på dette lidt mere i SysInternals-bogen synes at angive, at registreringsnøglehåndtag er almindelige kerneobjekter, der ligner filhåndtag. Men CloseHandle kan ikke lukke HKEY s, og RegCloseKey kan ikke lukke andre former for kernelobjekter. [10] [11] [12]


Hvorfor sondringen?

Bedste reference


Det skyldes, at kun en del af funktionalitetens funktionalitet er implementeret i kernen. Den indeholder de grundlæggende operationer (oprette, slette, læse, skrive osv.) Til at arbejde med de lokale registernøgler.


De resterende funktioner implementeres i advapi32.dll og arbejder i brugerens tilstand:



  • Adgang til et fjernt registreringsdatabase ved hjælp af RegConnectRegistry

  • Adgang til HKEY\_PERFORMANCE\_DATA

  • Konvertering af Win32-registreringsrepræsentation til indfødt repræsentation

  • WOW64s registreringsdatabase omdirigering på 64-bit systemer (til 32-bit applikationer)



Kerneldelen af ​​funktionaliteten er tilgængelig via den indbyggede API: NtCreateKey, NtOpenKey osv. Når man sammenligner disse funktioner med Win32 API, kan det ses, at den indbyggede API bruger de 'klassiske' HANDLE-deskriptorer i stedet for HKEY.