[Toc][Index]

FS_FSCTL - File System Control

  
Purpose   
Allow an extended standard interface between an application and a file 
system driver. 
Calling Sequence   

int far pascal FS_FSCTL(pArgdat, iArgType, func, pParm, lenParm, plenParmIO,
                        pData, lenData, plenDataIO)

union argdat far * pArgDat;
unsigned short iArgType;
unsigned short func;
char far * pParm;
unsigned short lenParm;
unsigned short far * plenParmIO;
char far * pData;
unsigned short lenData;
unsigned short far * plenDataIO;


Where   
pArgDat is a pointer to the union whose contents depend on iArgType. The 
union is defined as follows: 

union argdat {

    /* pArgType = 1, FileHandle directed case */

    struct sf {
        struct sffsi far * psffsi;
        struct sffsd far * psffsd;
    };

    /* pArgType = 2, Pathname directed case */

    struct cd {
        struct cdfsi far * pcdfsi;
        struct cdfsd far * pcdfsd;
        char far *         pPath;
        unsigned short     iCurDirEnd;
    };

    /* pArgType = 3, FSD Name directed case */
    /* pArgDat is Null                      */
};


iArgType indicates the argument type. 
iArgType = 1 
means that pArgDat->sf.psffsi and pArgDat->sf.psffsd point to an sffsi and 
sffsd, respectively. 
iArgType = 2 
means that pArgDat->cd.pcdfsi and pArgDat->cd.pcdfsd point to a cdfsi and 
cdfsd, pArgDat->cd.pPath points to a canonical pathname, and pArgDat->cd 
.iCurDirEnd gives the index of the end of the current directory in pPath. 
The FSD does not need to verify the pPath pointer. 
iArgType = 3 
means that the call was FSD name routed, and pArgDat is a NULL pointer. 
func indicates the function to perform. 
func == 1 indicates a request for new error code information. 
func == 2 indicates a request for the maximum EA size and EA list size 
supported by the FSD. 
pParm is the address of the application input parameter area. 
Addressing of this data area has not been validated by the kernel (see 
FSH_ PROBEBUF). 
lenParm is the maximum length of the application parameter area (pParm). 
plenParmIO On input, contains the length in bytes of the parameters being 
passed in to the FSD in pParm. On return, contains the length in bytes of 
data returned in pParm by the FSD. The length of the data returned by the 
FSD in pParm must not exceed the length in lenParm. Addressing of this 
area is not validated by the kernel (see FSH_PROBEBUF). 
pData is the address of the application output data area. 
Addressing of this data area is not validated by the kernel (see 
FSH_PROBEBUF ). 
lenData is the maximum length of the application output data area (pData) 
. 
plenDataIO On input, contains the length in bytes of the data being passed 
in to the FSD in pData. On return, contains the length in bytes of data 
returned in pData by the FSD. The length of the data returned by the FSD 
in pData must not exceed the length in lenData. Addressing of this area is 
not validated by the kernel (see FSH_PROBEBUF). 
  
Remarks   
The accessibility of the parameter and data buffers has not been validated 
by the kernel. FS_PROBEBUF must be used. 
All FSDs must support func == 1 to return new error code information and 
func == 2 to return the limits of the EA sizes. 
For func == 1, the error code is passed to the FSD in the first WORD of 
the parameter area. On return, the first word of the data area contains 
the length of the ASCIIZ string containing an explanation of the error 
code. The data area contains the ASCIIZ string beginning at the second 
WORD. 
For func == 2, the maximum EA and EA list sizes supported by the FSD are 
returned in the buffer pointed to by pData in the following format: 

struct EASizeBufStruc {
    unsigned short easb_MaxEASize;     /* Max size of an individual EA */
    unsigned long easb_MaxEAListSize;  /* Max full EA list size        */
}



Created using Inf-PHP v.2 (c) 2003 Yuri Prokushev
Created using Inf-HTML v.0.9b (c) 1995 Peter Childs