2003-08-13 05:53:07 +04:00
/*
Unix SMB / CIFS implementation .
NTVFS structures and defines
Copyright ( C ) Andrew Tridgell 2003
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
/* modules can use the following to determine if the interface has changed */
# define NTVFS_INTERFACE_VERSION 1
/* each backend has to be one one of the following 3 basic types. In
* earlier versions of Samba backends needed to handle all types , now
* we implement them separately . */
enum ntvfs_type { NTVFS_DISK , NTVFS_PRINT , NTVFS_IPC } ;
/* the ntvfs operations structure - contains function pointers to
the backend implementations of each operation */
struct ntvfs_ops {
/* initial setup */
NTSTATUS ( * connect ) ( struct request_context * req , const char * sharename ) ;
NTSTATUS ( * disconnect ) ( struct tcon_context * conn ) ;
/* path operations */
NTSTATUS ( * unlink ) ( struct request_context * req , struct smb_unlink * unl ) ;
NTSTATUS ( * chkpath ) ( struct request_context * req , struct smb_chkpath * cp ) ;
NTSTATUS ( * qpathinfo ) ( struct request_context * req , union smb_fileinfo * st ) ;
NTSTATUS ( * setpathinfo ) ( struct request_context * req , union smb_setfileinfo * st ) ;
NTSTATUS ( * open ) ( struct request_context * req , union smb_open * oi ) ;
NTSTATUS ( * mkdir ) ( struct request_context * req , union smb_mkdir * md ) ;
NTSTATUS ( * rmdir ) ( struct request_context * req , struct smb_rmdir * rd ) ;
2003-08-13 20:04:21 +04:00
NTSTATUS ( * rename ) ( struct request_context * req , union smb_rename * ren ) ;
2003-08-13 05:53:07 +04:00
NTSTATUS ( * copy ) ( struct request_context * req , struct smb_copy * cp ) ;
/* directory search */
NTSTATUS ( * search_first ) ( struct request_context * req , union smb_search_first * io , void * private ,
BOOL ( * callback ) ( void * private , union smb_search_data * file ) ) ;
NTSTATUS ( * search_next ) ( struct request_context * req , union smb_search_next * io , void * private ,
BOOL ( * callback ) ( void * private , union smb_search_data * file ) ) ;
NTSTATUS ( * search_close ) ( struct request_context * req , union smb_search_close * io ) ;
/* operations on open files */
NTSTATUS ( * ioctl ) ( struct request_context * req , struct smb_ioctl * io ) ;
NTSTATUS ( * read ) ( struct request_context * req , union smb_read * io ) ;
NTSTATUS ( * write ) ( struct request_context * req , union smb_write * io ) ;
NTSTATUS ( * seek ) ( struct request_context * req , struct smb_seek * io ) ;
NTSTATUS ( * flush ) ( struct request_context * req , struct smb_flush * flush ) ;
NTSTATUS ( * close ) ( struct request_context * req , union smb_close * io ) ;
NTSTATUS ( * exit ) ( struct request_context * req ) ;
NTSTATUS ( * lock ) ( struct request_context * req , union smb_lock * lck ) ;
NTSTATUS ( * setfileinfo ) ( struct request_context * req , union smb_setfileinfo * info ) ;
NTSTATUS ( * qfileinfo ) ( struct request_context * req , union smb_fileinfo * info ) ;
/* filesystem operations */
NTSTATUS ( * fsinfo ) ( struct request_context * req , union smb_fsinfo * fs ) ;
/* printing specific operations */
NTSTATUS ( * lpq ) ( struct request_context * req , union smb_lpq * lpq ) ;
/* trans interfaces - only used by CIFS backend to prover complete passthru for testing */
NTSTATUS ( * trans2 ) ( struct request_context * req , struct smb_trans2 * trans2 ) ;
} ;
/* this structure is used by backends to determine the size of some critical types */
struct ntvfs_critical_sizes {
int sizeof_ntvfs_ops ;
int sizeof_SMB_OFF_T ;
int sizeof_tcon_context ;
int sizeof_request_context ;
} ;