2012-03-22 11 views
6

Una pregunta muy simple, si creo un HANDLE en app1.exe y obtiene el valor 0x01, ¿ese valor es globalmente único?¿Los mangos winapi son globales?

O es posible que cuando algún otro proceso crea un HANDLE que también tiene el valor 0x01.

Si no son únicos, qué otra construcción puedo usar para obtener una ID única compatible con identificadores (de modo que sea imposible o muy poco probable que se cree un HANDLE con esa identificación en otro lugar).

+0

http://www.windows-api.com/microsoft/Win32-Kernel/31543684/wrappinghooking-api-how-to-handle-closehandle.aspx lectura relacionada;) – n00b

+1

Ha hecho dos preguntas en una. Respondí uno sobre si 'HANDLE' es único, pero la respuesta al otro depende de para qué necesitas una identificación única. – hamstergene

+0

para suplantación CreateFileW ReadFile de otro proceso (también otras cosas) utilizando ganchos. – n00b

Respuesta

5

Lo importante es comprender que los identificadores no son objetos. Los identificadores son punteros (o índices) para la tabla de objetos por proceso. Para responder a su pregunta, las MANIJAS no son únicas en el mundo, pero tienen un alcance que solo tiene sentido dentro de un proceso en particular.

Para que cualquier objeto kernel pueda ser accesible desde otro proceso, tiene que DuplicateHandle.

Otra manera de compartir objetos a través de procesos es llamar con CreateProcessbInheritHandles conjunto de verdadera.

+0

inherithandles necesita un proceso para crear otro .. no se puede hacer; P – n00b

2

No son únicos. HANDLE los valores son locales para el proceso actual. El mismo valor puede ser un identificador no válido o referirse a un objeto diferente en otro proceso. Una excepción a esta regla son los identificadores heredados del proceso principal.

La única forma de tener una identificación única sin un registro centralizado es usar GUID. Pero no son compatibles con HANDLE, son de 128 bits mientras que las de 32 o 64 bits.

Cuestiones relacionadas