FS_Dir


FS_Dir(
 PIOREQ pir
 )

Directory operations (change, make, and remove) are performed through FS_Dir. This routine handles the Win32 functions: CreateDirectory(), RemoveDirectory(), and SetCurrentDirectory(); and INT 21h functions: 39h, 3Ah, and 3Bh.

ir_ppath

Supplies a pointer to the unicode canonicalized directory pathname for the operation. Wildcards are not allowed on the pathname.

ir_flags

Supplies the command type to perform.

Command Type Values:

One of the following types will be specified.

Value

Meaning

CREATE_DIR

Make a new directory.

DELETE_DIR

Remove an existing directory.

CHECK_DIR

Check if the directory exists.

QUERY83_DIR

Return a pure 8.3 pathname for the path passed in, which possibly has mixed components.

QUERYLONG_DIR

Return a pure LFN pathname for the path passed in which possibly has mixed components.


ir_rh

Supplies handle to disk volume or network resource which contains the directory.

ir_ppath2

Supplies pointer to buffer to contain the unicode pure pathname on the QUERY83_DIR and QUERYLONG_DIR commands. This parameter is not valid for the other commands.

ir_attr

Supplies path parsing flags for the pathname.

Path Parsing Flags:

The following path parsing flags are passed in.

Value

Meaning

FILE_FLAG_LONG_PATH

Path has a longname component.

FILE_FLAG_KEEP_CASE

Preserve the case of the filename passed in when storing on disk. This also implies that this call should use longname semantics for its processing.

FILE_FLAG_HAS_DOT

Filename component has a dot in its name.

FILE_FLAG_IS_LFN

Filename component is a longname.


ir_uFname

Pointer to the case-preserved filename component in unicode.

ir_upath

Pointer to the unparsed user pathname in unicode.

ir_user

Supplies user id for this request.

ir_pid

Supplies process id for this request.

ir_error

Returns status of the operation ( 0 if no error, errorcode otherwise ).

ir_ppath2

Contains the pure 8.3 or LFN pathname on the QUERY83_DIR and QUERYLONG_DIR commands respectively. This parameter is not returned on the other commands. The FSD must return a canonicalized unicode pathname.


If an FSD does not support long filenames on a volume and it gets a LFN pathname, it should fail the call. The QUERY83_DIR command should be failed on volumes that have no 8.3 names e.g HPFS. However, The QUERYLONG_DIR command should never be failed. On a volume that has no LFNs, it should just return the 8.3 version passed in. Note that if a volume supports LFNs, the pathname passed in can be a mixture of longname and shortname components. The FSD should be able to handle this and should not make any assumptions about the pathname passed in.