2012-03-06 6 views
16

que estaba mirando la documentación para DuplicateHandle el otro día y se dio cuenta de que DuplicateHandle es capaz de copiar identificadores de clave de registro (s) HKEY. Al leer esto un poco más en el libro de SysInternals, parece indicar que los identificadores de clave de registro son simples objetos del kernel, similares a los manejadores de archivos. Sin embargo, CloseHandle no se puede cerrar HKEY s, y RegCloseKey no puede cerrar otros tipos de objetos de kernel.¿Por qué existe RegCloseKey (cuando CloseHandle parece realizar la misma función)?

¿Por qué la diferencia?

+0

Hmm, sólo puede adivinar que HKEYs fueron introducidas anteriormente (en Windows 3.1), y luego Microsoft no quería unificar las interfaces a pesar de que las implementaciones se han fusionado. – Philipp

+1

Solo estoy adivinando aquí: Al final de la documentación para 'CloseHandle()' dice: > Cerrar un manejador de subproceso no finaliza el subproceso asociado ni elimina el objeto de subproceso. Cerrar un identificador de proceso no finaliza el proceso asociado ni elimina el objeto de proceso. Para eliminar un objeto de subproceso, debe finalizar el subproceso y luego cerrar todos los identificadores al subproceso. Para obtener más información, vea Terminar un hilo. Para eliminar un objeto de proceso, debe finalizar el proceso y luego cerrar todos los identificadores del proceso. Se pueden realizar operaciones similares al cerrar una clave de registro. – yasouser

+0

@Philipp: Eso es lo que yo también pensé, excepto, por ejemplo, CreateFile estuvo disponible en Win3.1 días (si no me equivoco), y no hay función de "CloseFile". –

Respuesta

14

Es porque sólo una parte de la funcionalidad del registro se lleva a cabo en el núcleo. Incluye las operaciones básicas (crear, eliminar, leer, escribir, etc.) para trabajar con las claves de registro local.

El resto de funciones se implementan en el advapi32.dll y trabajar en el modo de usuario:

  • acceso a un registro remoto mediante RegConnectRegistry
  • El acceso a la HKEY_PERFORMANCE_DATA
  • la conversión de la representación del registro de Win32 en Native representación
  • redirección de registro de WOW64 en sistemas de 64 bits (para aplicaciones de 32 bits)

La parte del núcleo de la funcionalidad está disponible a través de la API nativa: NtCreateKey, NtOpenKey, etc. Al comparar estas funciones con la API de Win32, se puede ver que la API nativa utiliza los descriptores HANDY "clásicos" en lugar de HKEY.

+0

Como ya he dicho, la razón para esto es que parte de la funcionalidad del registro se implementa en el modo de usuario (advapi32.dll), y no todos los objetos HKEY son, de hecho, las MANIJAS "reales" del kernel. – Flot2011

+0

Lo sentimos, sí, ya me había borrado mi comentario porque vi que, mientras tanto :) –

+0

@ Flot2011: Sólo por curiosidad, ¿puedes por favor, cite la fuente de la información? Me resulta difícil obtener este tipo de información de tipo "interno". – yasouser

Cuestiones relacionadas