2010-04-23 10 views
5

È possibile che un processo figlio erediti un handle dal processo principale se un processo è a 32 bit e l'altro a 64 bit?Windows può gestire l'ereditarietà attraversando il limite a 32-bit/64-bit?

HANDLE è un tipo a 64 bit su Win64 e un tipo a 32 bit su Win32, il che suggerisce che anche se fosse possibile che fosse possibile in tutti i casi, ci sarebbero alcuni casi in cui avrebbe esito negativo: un processo padre a 64 bit , un processo figlio a 32 bit e un handle che non può essere rappresentato in 32 bit.

Oppure l'assegnazione di un nome all'oggetto è l'unico modo per un processo a 32 bit e un processo a 64 bit per ottenere un handle per lo stesso oggetto?

risposta

7

Se è un handle di file o altro handle del kernel, allora sì.

Succede solo che sebbene HANDLE sia un tipo a 64 bit, può sempre essere convertito a 32 bit e viceversa per qualsiasi valore di handle valido.

Gli handle GDI non possono essere ereditati.

0

Sì, ma quando si converte da handle a 32 bit a handle a 64 bit, assicurarsi di firmare-estendere il valore. Vale a dire, impostare i bit 32-63 sul valore del bit 31. Quindi, 0x80000000 diventa 0xFFFFFFFF80000000, non 0x0000000080000000. Inoltre, si noti che questa compatibilità tra handle a 32 e 64 bit è garantita solo per gli handle in modalità utente (che è tutto ciò che si dovrebbe mai avere a che fare comunque, a meno che non si stia scrivendo un driver o qualcosa che funzioni in modalità kernel).

Vedere anche: this SO question and its answer (Che cos'è l'intervallo HANDLE di Windows su un'applicazione a 64 bit?)