|
|
/*++
Copyright (c) 1996-2001 Microsoft Corporation
Module Name:
Qfs.h
Abstract:
Redirection layer for quorum access
Author:
GorN 19-Sep-2001
Revision History:
--*/
#ifndef _QFS_H_INCLUDED
#define _QFS_H_INCLUDED
#ifdef __cplusplus
extern "C" { #endif
VOID QfsInitialize(); VOID QfsCleanup();
// By defining a handle this way
// we allow compiler to catch the places where
// QfsHANDLE is used mistakenly in Win32 api requiring
// a regular handle and vice versa
typedef struct _QfsHANDLE { PVOID realHandle; int IsQfs; } QfsHANDLE, *PQfsHANDLE;
#define REAL_INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)
#define QfspHandle(x) ((x).realHandle)
#define QfsIsHandleValid(x) (QfspHandle(x) != REAL_INVALID_HANDLE_VALUE)
extern QfsHANDLE QfsINVALID_HANDLE_VALUE;
#if !defined(QFS_DO_NOT_UNMAP_WIN32)
#undef INVALID_HANDLE_VALUE
#undef CreateFile
#define CreateFile UseQfsCreateFile
#define CreateFileW UseQfsCreateFile
#define WriteFile UseQfsWriteFile
#define ReadFile UseQfsReadFile
#define FlushFileBuffers UseQfsFlushFileBuffers
#undef DeleteFile
#define DeleteFile UseQfsDeleteFile
#define DeleteFileW UseQfsDeleteFile
#undef RemoveDirectory
#define RemoveDirectory UseQfsRemoveDirectory
#define RemoveDirectoryW UseQfsRemoveDirectory
// NYI add the rest
#endif
QfsHANDLE QfsCreateFile( LPCWSTR lpFileName, // file name
DWORD dwDesiredAccess, // access mode
DWORD dwShareMode, // share mode
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SD
DWORD dwCreationDisposition, // how to create
DWORD dwFlagsAndAttributes, // file attributes
HANDLE hTemplateFile // handle to template file
);
BOOL QfsCloseHandle( QfsHANDLE hObject // handle to object
);
BOOL QfsWriteFile( QfsHANDLE hFile, // handle to file
LPCVOID lpBuffer, // data buffer
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // number of bytes written
LPOVERLAPPED lpOverlapped // overlapped buffer
);
BOOL QfsReadFile( QfsHANDLE hFile, // handle to file
LPVOID lpBuffer, // data buffer
DWORD nNumberOfBytesToRead, // number of bytes to read
LPDWORD lpNumberOfBytesRead, // number of bytes read
LPOVERLAPPED lpOverlapped // overlapped buffer
);
BOOL QfsFlushFileBuffers( QfsHANDLE hFile // handle to file
);
BOOL QfsDeleteFile( LPCTSTR lpFileName );
BOOL QfsRemoveDirectory( LPCTSTR lpFileName );
QfsHANDLE QfsFindFirstFile( LPCTSTR lpFileName, // file name
LPWIN32_FIND_DATA lpFindFileData // data buffer
);
BOOL QfsFindNextFile( QfsHANDLE hFindFile, // search handle
LPWIN32_FIND_DATA lpFindFileData // data buffer
);
BOOL QfsFindClose( QfsHANDLE hFindFile // file search handle
);
#define QfsFindCloseIfValid(hFile) (QfsIsHandleValid(hFile)?QfsFindClose(hFile):0)
#define QfsCloseHandleIfValid(hFile) (QfsIsHandleValid(hFile)?QfsCloseHandle(hFile):0)
DWORD QfsSetEndOfFile( QfsHANDLE hFile, LONGLONG Offset );
DWORD QfsGetFileSize( QfsHANDLE hFile, // handle to file
LPDWORD lpFileSizeHigh // high-order word of file size
);
DWORD QfsIsOnline( IN LPCWSTR Path, OUT BOOL *pfOnline ); // Returns success if the Path is valid qfs path. Sets pfOnline to where the resource is online or not
// failure otherwise
HANDLE QfsCreateFileMapping( QfsHANDLE hFile, // handle to file
LPSECURITY_ATTRIBUTES lpAttributes, // security
DWORD flProtect, // protection
DWORD dwMaximumSizeHigh, // high-order DWORD of size
DWORD dwMaximumSizeLow, // low-order DWORD of size
LPCTSTR lpName // object name
);
BOOL QfsGetOverlappedResult( QfsHANDLE hFile, // handle to file, pipe, or device
LPOVERLAPPED lpOverlapped, // overlapped structure
LPDWORD lpNumberOfBytesTransferred, // bytes transferred
BOOL bWait // wait option
);
BOOL QfsSetFileAttributes( LPCWSTR lpFileName, // file name
DWORD dwFileAttributes // attributes
);
BOOL QfsCopyFile( LPCWSTR lpExistingFileName, // name of an existing file
LPCWSTR lpNewFileName, // name of new file
BOOL bFailIfExists // operation if file exists
);
BOOL QfsCopyFileEx( LPCWSTR lpExistingFileName, // name of existing file
LPCWSTR lpNewFileName, // name of new file
LPPROGRESS_ROUTINE lpProgressRoutine, // callback function
LPVOID lpData, // callback parameter
LPBOOL pbCancel, // cancel status
DWORD dwCopyFlags // copy options
);
BOOL QfsCreateDirectory( LPCWSTR lpPathName, // directory name
LPSECURITY_ATTRIBUTES lpSecurityAttributes // SD
);
BOOL QfsGetDiskFreeSpaceEx( LPCTSTR lpDirectoryName, // directory name
PULARGE_INTEGER lpFreeBytesAvailable, // bytes available to caller
PULARGE_INTEGER lpTotalNumberOfBytes, // bytes on disk
PULARGE_INTEGER lpTotalNumberOfFreeBytes // free bytes on disk
);
BOOL QfsMoveFileEx( LPCTSTR lpExistingFileName, // file name
LPCTSTR lpNewFileName, // new file name
DWORD dwFlags // move options
);
#define QfsMoveFile(lpSrc, lpDst) \
QfsMoveFileEx(lpSrc, lpDst, MOVEFILE_COPY_ALLOWED)
UINT QfsGetTempFileName( LPCTSTR lpPathName, // directory name
LPCTSTR lpPrefixString, // file name prefix
UINT uUnique, // integer
LPTSTR lpTempFileName // file name buffer
);
LONG QfsRegSaveKey( HKEY hKey, // handle to key
LPCWSTR lpFile, // data file
LPSECURITY_ATTRIBUTES lpSecurityAttributes // SD
);
DWORD QfsMapFileAndCheckSum( LPCWSTR Filename, PDWORD HeaderSum, PDWORD CheckSum );
////////////// Clusrtl funcs replacement ////////////////
BOOL QfsClRtlCopyFileAndFlushBuffers( IN LPCWSTR lpszSourceFile, IN LPCWSTR lpszDestinationFile );
BOOL QfsClRtlCreateDirectory( LPCWSTR lpPathName // directory name
);
DWORD QfsSetFileSecurityInfo( IN LPCWSTR lpszFile, IN DWORD dwAdminMask, IN DWORD dwOwnerMask, IN DWORD dwEveryoneMask ); // opens the specified file/directory with
// GENERIC_READ|WRITE_DAC|READ_CONTROL,
// 0,
// NULL,
// OPEN_ALWAYS,
// FILE_FLAG_BACKUP_SEMANTICS,
// and then calls ClRtlSetObjSecurityInfo on it
////////////////////////////////////////////
#ifdef __cplusplus
}; #endif
#endif
|