Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The input for this algorithm is:
PathName: A null-terminated UTF-16 string that specifies the path name to check in a case-insensitive manner.
The output for this algorithm is:
Type: A path type value as specified in section 2.2.2.9 if the algorithm finds an appropriate path type; otherwise ERROR_INVALID_NAME (0x0000007B).
The pseudo code for the algorithm is shown in the following example.
-
// The following set of characters MUST be treated as invalid characters: <> " | If (PathName contains invalid character) Return ERROR_INVALID_NAME; If (PathName begins with ‘\’) If (PathName begins with "\\’’) If (PathName begins with "\\.’’) If (PathName begins with "\\.\’’) If (Remaining part of the PathName contains ‘*’ or ‘?’) Return Type= ITYPE_PATH_ABSD_WC; Else Return Type= ITYPE_PATH_ABSD; EndIf Else Return ERROR_INVALID_NAME; EndIf ElseIf ((PathName begins with "\\<computer-name>’’) // <computer-name> is any string other than ".") If (PathName begins with "\\<computer-name>\’’) If (Remaining part of the PathName is not empty) If (Remaining part of the PathName contains ’*’ or ‘?’) Return Type= ITYPE_UNC_WC_PATH; Else Return Type= ITYPE_UNC; EndIf EndIf Else Return Type= ITYPE_UNC_COMPNAME; EndIf ElseIf ((PathName begins with "\\*’) If (PathName equals to "\\*’’) Return Type= ITYPE_UNC_WC; Else Return ERROR_INVALID_NAME; EndIf EndIf Else // PathName begins with only single slash "\" If (PathName begins with "\DEV’’) If (PathName equals "\DEV\LPT<n>’’ or "\DEV\LPT<n>:’’) // <n> is any number, Examples: "\DEV\LPT1", "\DEV\LPT4:" Return Type= ITYPE_DEVICE_LPT; ElseIf (PathName equals "\DEV\COM<n>’’ or "\DEV\COM<n>:’’) // <n> is any number, Examples: "\DEV\COM1", "\DEV\COM4:" Return Type= ITYPE_DEVICE_COM; Else Return ERROR_INVALID_NAME; EndIf ElseIf (PathName contains ’*’ or ‘?’) Return Type= ITYPE_PATH_ABSND_WC; Else Return Type= ITYPE_PATH_ABSND; EndIf EndIf ElseIf (PathName begins with [A-Z] followed by ‘:’)// Examples: "C:", "f:" If (PathName equals "<drive>:") // <drive> is any letter Return ITYPE_DEVICE_DISK Else // (PathName = "<drive>:\...") If (Remaining part of the PathName after "<drive>:"contains ’*’ or ‘?’) Return Type= ITYPE_PATH_ABSD_WC; Else Return Type= ITYPE_PATH_ABSD; EndIf EndIf ElseIf (PathName equals "LPT<n>" or "LPT<n>:") //Examples: "LPT1", "lpt4:" Return Type= ITYPE_DEVICE_LPT; ElseIf (PathName equals "COM<n>" or "COM<n>:") //Examples: "COM1", "com4:" Return Type= ITYPE_DEVICE_COM; Else // Relative Paths If (PathName contains ’*’ or ‘?’) Return Type= ITYPE_PATH_RELND_WC; Else Return Type= ITYPE_PATH_RELND; EndIf EndIf