325 lines
7.6 KiB
C
325 lines
7.6 KiB
C
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
fs.h
|
|
|
|
Abstract:
|
|
|
|
Interface between srv and fs
|
|
|
|
Author:
|
|
|
|
Ahmed Mohamed (ahmedm) 1-Feb-2000
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef __FS_INTERFACE_H__
|
|
#define __FS_INTERFACE_H__
|
|
|
|
// note: we assume DWORD and DWORDDLONG are defined (from windows.h)
|
|
#define UINT16 USHORT
|
|
#ifndef IN
|
|
#define IN
|
|
#endif
|
|
|
|
#ifndef OUT
|
|
#define OUT
|
|
#endif
|
|
|
|
#ifndef _BASETSD_H_
|
|
typedef DWORDLONG UINT64; // a 64-bit unsigned value
|
|
typedef DWORD UINT32; // a 32-bit unsigned value
|
|
#endif
|
|
|
|
#ifndef MAXPATH
|
|
#define MAXPATH 1024
|
|
#endif
|
|
|
|
typedef UINT64 TIME64; // in units of 100ns since Jan 1, 1601 (AD)
|
|
|
|
#define fhandle_t USHORT
|
|
|
|
#define INVALID_UINT64 ((UINT64)(0))
|
|
#define INVALID_UINT32 ((UINT32)(0))
|
|
#define INVALID_TIME64 INVALID_UINT64
|
|
#define INVALID_FHANDLE_T ((fhandle_t)(-1))
|
|
|
|
// disposition:
|
|
#define DISP_CREATE_NEW 0x10000000
|
|
#define DISP_CREATE_ALWAYS 0x20000000
|
|
#define DISP_OPEN_EXISTING 0x30000000
|
|
#define DISP_OPEN_ALWAYS 0x40000000
|
|
#define DISP_TRUNCATE_EXISTING 0x50000000
|
|
#define DISP_DIRECTORY 0x60000000
|
|
#define FS_DISP_MASK 0x70000000
|
|
|
|
// access:
|
|
#define ACCESS_READ 0x00010000
|
|
#define ACCESS_WRITE 0x00020000
|
|
#define FS_ACCESS_MASK 0x00030000
|
|
|
|
// cache:
|
|
#define CACHE_WRITE_THROUGH 0x01000000
|
|
#define CACHE_NO_BUFFERING 0x02000000
|
|
#define FS_CACHE_MASK 0x03000000
|
|
|
|
// sharing:
|
|
#define SHARE_READ 0x00100000
|
|
#define SHARE_WRITE 0x00200000
|
|
#define FS_SHARE_MASK 0x00300000
|
|
|
|
// flags = dispositions | access | sharing
|
|
#define FLAGS_MASK (FS_DISP_MASK | FS_ACCESS_MASK | FS_SHARE_MASK | FS_CACHE_MASK)
|
|
|
|
// attributes:
|
|
#define ATTR_SYMLINK 0x00002000
|
|
#define ATTR_DIRECTORY 0x00000010
|
|
#define ATTR_READONLY 0x00000001
|
|
#define ATTR_HIDDEN 0x00000002
|
|
#define ATTR_SYSTEM 0x00000004
|
|
#define ATTR_ARCHIVE 0x00000020
|
|
#define ATTR_COMPRESSED 0x00000800
|
|
#define ATTR_OFFLINE 0x00001000
|
|
#define ATTR_MASK (ATTR_SYMLINK | ATTR_DIRECTORY | \
|
|
ATTR_READONLY | ATTR_HIDDEN | \
|
|
ATTR_SYSTEM | ATTR_ARCHIVE | \
|
|
ATTR_COMPRESSED | ATTR_OFFLINE)
|
|
|
|
#define MAX_FS_NAME_LEN 64
|
|
|
|
// file system attributes
|
|
typedef struct {
|
|
CHAR fs_name[MAX_FS_NAME_LEN];
|
|
UINT64 total_units;
|
|
UINT64 free_units;
|
|
ULONG sectors_per_unit;
|
|
ULONG bytes_per_sector;
|
|
}fs_attr_t;
|
|
|
|
typedef struct {
|
|
// sizes
|
|
UINT64 file_size;
|
|
UINT64 alloc_size;
|
|
// times
|
|
TIME64 create_time;
|
|
TIME64 access_time;
|
|
TIME64 mod_time;
|
|
// mode/attr
|
|
UINT32 attributes;
|
|
}fattr_t;
|
|
|
|
typedef struct {
|
|
UINT32 cookie;
|
|
fattr_t attribs;
|
|
WCHAR name[MAX_PATH];
|
|
} dirinfo_t;
|
|
|
|
typedef struct {
|
|
DWORD FsVer;
|
|
DWORD (*FsCreate)(
|
|
IN PVOID fshandle,
|
|
IN LPWSTR name,
|
|
IN USHORT name_len,
|
|
IN UINT32 flags,
|
|
IN fattr_t* attr,
|
|
OUT fhandle_t* handle,
|
|
OUT UINT32* action
|
|
);
|
|
|
|
DWORD (*FsLookup)(
|
|
IN PVOID fshandle,
|
|
IN LPWSTR name,
|
|
IN USHORT len,
|
|
OUT fattr_t* attr
|
|
);
|
|
|
|
DWORD (*FsSetAttr)(
|
|
IN PVOID fshandle,
|
|
IN fhandle_t handle,
|
|
IN fattr_t* attr
|
|
);
|
|
|
|
DWORD (*FsSetAttr2)(
|
|
IN PVOID fshandle,
|
|
IN LPWSTR path,
|
|
IN USHORT len,
|
|
IN fattr_t* attr
|
|
);
|
|
|
|
DWORD (*FsGetAttr)(
|
|
IN PVOID fshandle,
|
|
IN fhandle_t handle,
|
|
OUT fattr_t* attr
|
|
);
|
|
|
|
DWORD (*FsClose)(
|
|
IN PVOID fshandle,
|
|
IN fhandle_t handle
|
|
);
|
|
|
|
DWORD (*FsWrite)(
|
|
IN PVOID fshandle,
|
|
IN fhandle_t handle,
|
|
IN UINT32 offset,
|
|
IN OUT UINT16* count,
|
|
IN void* buffer,
|
|
IN PVOID context
|
|
);
|
|
|
|
DWORD (*FsRead)(
|
|
IN PVOID fshandle,
|
|
IN fhandle_t handle,
|
|
IN UINT32 offset,
|
|
IN OUT UINT16* count,
|
|
OUT void* buffer,
|
|
IN PVOID context
|
|
);
|
|
|
|
|
|
// to use readir(), we do a create() with DISP_DIRECTORY
|
|
// returns ERROR_NO_MORE_FILES when done...
|
|
DWORD (*FsReadDir)(
|
|
IN PVOID fshandle,
|
|
IN fhandle_t dir,
|
|
IN UINT32 cookie,
|
|
OUT dirinfo_t* buffer,
|
|
IN UINT32 size,
|
|
OUT UINT32* entries_found
|
|
);
|
|
|
|
|
|
DWORD (*FsStatfs)(
|
|
IN PVOID fshandle,
|
|
OUT fs_attr_t* attr
|
|
);
|
|
|
|
DWORD (*FsRemove)(
|
|
IN PVOID fshandle,
|
|
IN LPWSTR name,
|
|
IN USHORT len
|
|
);
|
|
|
|
DWORD (*FsRename)(
|
|
IN PVOID fshandle,
|
|
IN LPWSTR fromname,
|
|
IN USHORT from_len,
|
|
IN LPWSTR toname,
|
|
IN USHORT to_len
|
|
);
|
|
|
|
DWORD (*FsMkdir)(
|
|
IN PVOID fshandle,
|
|
IN LPWSTR name,
|
|
IN USHORT len,
|
|
IN fattr_t* attr
|
|
);
|
|
|
|
DWORD (*FsRmdir)(
|
|
IN PVOID fshandle,
|
|
IN LPWSTR name,
|
|
IN USHORT len
|
|
);
|
|
|
|
DWORD (*FsFlush)(
|
|
IN PVOID fshandle,
|
|
IN fhandle_t handle
|
|
);
|
|
|
|
DWORD (*FsLock)(
|
|
IN PVOID fshandle,
|
|
IN fhandle_t handle,
|
|
IN ULONG offset,
|
|
IN ULONG length,
|
|
IN ULONG flags,
|
|
IN PVOID context
|
|
);
|
|
|
|
DWORD (*FsUnlock)(
|
|
IN PVOID fshandle,
|
|
IN fhandle_t handle,
|
|
IN ULONG offset,
|
|
IN ULONG length
|
|
);
|
|
|
|
DWORD (*FsGetRoot)(
|
|
IN PVOID fshandle,
|
|
IN OUT LPWSTR fullpath
|
|
);
|
|
|
|
} FsDispatchTable;
|
|
|
|
#include "fsapi.h"
|
|
|
|
DWORD
|
|
FsMount(PVOID hdl, LPWSTR root_name, USHORT uid, USHORT *tid);
|
|
|
|
void
|
|
FsDisMount(PVOID hdl, USHORT uid, USHORT tid);
|
|
|
|
DWORD
|
|
FsLogonUser(PVOID hdl, HANDLE token, LUID LogonId, USHORT *uid);
|
|
|
|
void
|
|
FsLogoffUser(PVOID hdl, LUID LogonId);
|
|
|
|
DWORD
|
|
LsaInit(
|
|
HANDLE *LsaHandle,
|
|
ULONG *AuthenticationPackage
|
|
);
|
|
|
|
BOOL
|
|
LsaValidateLogon(
|
|
HANDLE LsaHandle,
|
|
ULONG AuthenticationPackage,
|
|
LPBYTE lpChallenge,
|
|
UINT cbChallengeSize,
|
|
LPBYTE lpResponse,
|
|
UINT cbResponseSize,
|
|
LPSTR lpszUserName,
|
|
LPSTR lpszDomainName,
|
|
LUID *pLogonId,
|
|
PHANDLE phLogonToken
|
|
);
|
|
|
|
BOOL
|
|
LsaGetChallenge(
|
|
HANDLE LsaHandle,
|
|
ULONG AuthenticationPackage,
|
|
LPBYTE lpChallenge,
|
|
UINT cbSize,
|
|
PUINT lpcbChallengeSize
|
|
);
|
|
|
|
|
|
FsDispatchTable *
|
|
FsGetHandle(PVOID FsCtx, USHORT tid, USHORT uid, PVOID *fshandle);
|
|
|
|
#define EPRINT(_x_) error_log _x_
|
|
#define DPRINT(_x_) debug_log _x_
|
|
|
|
#define SrvLogError(_x_) EPRINT(_x_)
|
|
|
|
#define FsLogError(_x_) EPRINT(_x_)
|
|
#define FsArbLog(_x_) DPRINT(_x_)
|
|
#define FsLogReplay(_x_) DPRINT(_x_)
|
|
#define FsLogUndo(_x_) DPRINT(_x_)
|
|
|
|
// enable this if you want details logging
|
|
#ifdef QFS_DBG
|
|
#define xFsLog(_x_) DPRINT(_x_)
|
|
#define FsLog(_x_) DPRINT(_x_)
|
|
#define SrvLog(_x_) DPRINT(_x_)
|
|
#else
|
|
#define xFsLog(_x_)
|
|
#define FsLog(_x_)
|
|
#define SrvLog(_x_)
|
|
#endif
|
|
|
|
#endif /* __FS_H */
|