VOID ObpHandleDosDeviceName( POBJECT_SYMBOLIC_LINK SymbolicLink ); Routine Description: This routine does extra processing symbolic links being created in the \?? object directory. This processing consists of: 1. Determine if the name of the symbolic link is of the form \??\x: where x can be any upper or lower case letter. If this is the case then we need to set the bit in KUSER_SHARED_DATA.DosDeviceMap to indicate that the drive letter exists. We also set KUSER_SHARED_DATA.DosDeviceDriveType to unknown for now. 2. Process the link target, trying to resolve it into a pointer to an object other than a object directory object. All object directories traversed must grant world traverse access other wise we bail out. If we successfully find a non object directory object, then reference the object pointer and store it in the symbolic link object, along with a remaining string if any. ObpLookupObjectName will used this cache object pointer to short circuit the name lookup directly to the cached object's parse routine. For any object directory objects traversed along the way, increment their symbolic link SymbolicLinkUsageCount field. This field is used whenever an object directory is deleted or its security is changed such that it no longer grants world traverse access. In either case, if the field is non-zero we walk all the symbolic links and resnap them. Arguments: SymbolicLink - pointer to symbolic link object being created. Name - pointer to the name of this symbolic link Return Value: None.