DefineDosDevice

The DefineDosDevice function lets an application define, redefine, or delete MS-DOS device names.

MS-DOS device names are stored as symbolic links in the object name space in Windows NT. The code that converts an MS-DOS path into a corresponding Windows NT path uses these symbolic links to map MS-DOS devices and drive letters. The DefineDosDevice function provides a mechanism whereby an application can modify the symbolic links used to implement the MS-DOS device name space.

BOOL DefineDosDevice(
  DWORD dwFlags,        // controllable aspect flag
  LPCTSTR lpDeviceName, // pointer to an MS-DOS device name string
  LPCTSTR lpTargetPath  // pointer to an MS-DOS or Windows NT path string
);
 

Parameters

dwFlags
Specifies several controllable aspects of the DefineDosDevice function. One or more of the following values can be used:
Value Meaning
DDD_RAW_TARGET_PATH If this value is specified, the function does not convert the lpTargetPath string from an MS-DOS path to a Windows NT path, but takes it as is.
DDD_REMOVE_DEFINITION If this value is specified, the function removes the specified definition for the specified device. To determine which definition to remove, the function walks the list of mappings for the device, looking for a match of lpTargetPath against a prefix of each mapping associated with this device. The first mapping that matches is the one removed, and then the function returns.

If lpTargetPath is NULL or a pointer to a NULL string, the function will remove the first mapping associated with the device and pop the most recent one pushed. If there is nothing left to pop, the device name will be removed.

If this value is NOT specified, the string pointed to by the lpTargetPath parameter will become the new mapping for this device.

DDD_EXACT_MATCH_ON_REMOVE If this value is specified along with DDD_REMOVE_DEFINITION, the function will use an exact match to determine which mapping to remove. Use this value to insure that you do not delete something that you did not define.

lpDeviceName
Pointer to an MS-DOS device name string specifying the device the function is defining, redefining, or deleting. The device name string must not have a trailing colon, unless a drive letter (C or D, for example) is being defined, redefined, or deleted.
lpTargetPath
Pointer to a path string that will implement this device. The string is an MS-DOS path string unless the DDD_RAW_TARGET_PATH flag is specified, in which case this string is a Windows NT path string.

Return Values

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

As stated in this function's introductory summary, the DefineDosDevice function provides a means whereby an application can create and modify the symbolic links used to implement the MS-DOS device namespace. To retrieve the current mapping for a particular MS-DOS device name or to obtain a list of all MS-DOS devices known to the system, use the QueryDosDevice function.

MS-DOS Device names are global. Once defined, an MS-DOS device name remains visible to all processes until either it is explicitly removed or the system reboots.

Note  Drive letters and device names defined at system boot time are protected from redefinition and deletion unless the user is an administrator.

QuickInfo

  Windows NT: Requires version 3.1 or later.
  Windows: Unsupported.
  Windows CE: Unsupported.
  Header: Declared in winbase.h.
  Import Library: Use kernel32.lib.
  Unicode: Implemented as Unicode and ANSI versions on Windows NT.

See Also

File I/O Overview, File Functions, QueryDosDevice