Symbolic Link magic

I understand that names given to DeviceObjects by
drivers with
IoCreateDevice can’t be seen by Win32 applications so  a
symbolic name needs to be set up.  But Win32
applications don’t see the symbolic
names either!  If I create the symbolic
link \??\DEV0, for example, with IoCreateSymbolicLink, an application
can’t
find the device with

<o:p> </o:p>            hDevice

CreateFile(“\??\DEV0”,

                        GENERIC_READ
| GENERIC_WRITE,

                        0,

                         NULL,

                        OPEN_EXISTING,

                        FILE_ATTRIBUTE_NORMAL,

                        NULL);

<o:p> </o:p>

It has to use:

<o:p> </o:p>hDevice =
CreateFile(“\\.\DEV0”,

                        GENERIC_READ
| GENERIC_WRITE,

                        0,

                         NULL,

                        OPEN_EXISTING,

                        FILE_ATTRIBUTE_NORMAL,

                        NULL);

<o:p> </o:p>Why doesn’t \??\DEV0 work and what’s
behind the \\.\DEV0
format?  It looks like we’re setting up a
UNC name. 

<o:p> </o:p>Thanks for any light on this.

> Why doesn’t \??\DEV0 work and what’s behind the

\\.\DEV0 format? It looks like we’re setting up a UNC name.

It just works that way. \??\DEV0 should work when using
with native NT names. \\.\DEV0 works with Win32 APIs.

L.