> > Windows SOCKET is a handler to *kernel* object and as such =

> > an *offset* in per-process handle table. As this table can =

> > not more than 2^24 entries, it's always *safe* to cast/truncate =

> > to 32-bit value and back. Even on 64-bit Windows.

> for reference,
> http://msdn2.microsoft.com/en-us/lib...85(VS.85).aspx. a.

This says that there can be no more than 2^24 entries per process, but =
it doesn't say that the value of the handle cannot exceed 2^24. Windows =
could, for example, use the high bits to indicate what type of handle it =
is. (Or might in a future version of Windows, causing applications that =
truncate handles to suddenly find they're not as portable as expected.)

For example, I don't see any reason an LSP couldn't use the high bits of =
a SOCKET handle to store some information which it strips off before it =
passes the SOCKET value to the underlying kernel code. Winsock =
explicitly supports user-level code between the Winsock functions and =
the kernel.

Does Microsoft actually specify somewhere that the integer value of a =
handle cannot exceed 2^24? The citation presented doesn't say that.


__________________________________________________ ____________________
OpenSSL Project http://www.openssl.org
Development Mailing List openssl-dev@openssl.org
Automated List Manager majordomo@openssl.org