📄 fileserver.h
字号:
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft shared
// source or premium shared source license agreement under which you licensed
// this source code. If you did not accept the terms of the license agreement,
// you are not authorized to use this source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the SOURCE.RTF on your install media or the root of your tools installation.
// THE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//
#include "SMB_Globals.h"
#include "SMBPackets.h"
#include "ShareInfo.h"
//
// Forward declare w/o pulling in headers
struct SMB_PACKET;
class PerFileState;
#ifndef NO_POOL_ALLOC
#define RANGE_NODE_ALLOC ce::singleton_allocator< ce::fixed_block_allocator<10>, sizeof(RANGE_NODE) >
#else
#define RANGE_NODE_ALLOC ce::allocator
#endif
class RANGE_NODE {
public:
LARGE_INTEGER Offset;
LARGE_INTEGER Length;
USHORT usFID;
};
class RangeLock {
public:
RangeLock() {}
~RangeLock() {ASSERT(0 == m_LockList.size());}
HRESULT IsLocked(SMB_LARGELOCK_RANGE *pRangeLock, BOOL *pfVal, USHORT *usFID = NULL);
HRESULT Lock(USHORT usFID, SMB_LARGELOCK_RANGE *pRangeLock);
HRESULT UnLock(USHORT usFID, SMB_LARGELOCK_RANGE *pRangeLock);
HRESULT UnLockAll(USHORT usFID);
private:
ce::list<RANGE_NODE, RANGE_NODE_ALLOC> m_LockList;
};
//
// Open disposition commands
// spec in smbhlp.zip
//#define DISPOSITION_MASK 0x03
#define DISP_OPEN_EXISTING 0x01
#define DISP_CREATE_NEW 0x10
#define DISP_OPEN_ALWAYS 0x11
#define DISP_CREATE_ALWAYS 0x12
//
// TRANS2_QUERY_FS_INFORMATION subcommands
#define SMB_INFO_ALLOCATION 0x01
#define SMB_INFO_VOLUME 0x02
#define SMB_QUERY_FS_VOLUME_INFO 0x102
#define SMB_QUERY_DISK_ALLOCATION_NT 0x103
#define SMB_QUERY_FS_ATTRIBUTE_INFO 0x105
//
// TRANS2_QUERY_FILE_INFORMATION subcommands
#define SMB_QUERY_FILE_ALL_INFO_ID 0x0107
#define SMB_QUERY_FILE_BASIC_INFO_ID 0x0101
#define SMB_QUERY_FILE_STANDARD_INFO_ID 0x0102
#define SMB_QUERY_FILE_EA_INFO_ID 0x0103
#define SMB_QUERY_FILE_STREAM_INFO_ID 0x0109
#define SMB_SET_FILE_BASIC_INFO 0x0101
#define SMB_SET_FILE_DISPOSITION_INFO 0x0102
#define SMB_SET_FILE_ALLOCATION_INFO 0x0103
#define SMB_SET_FILE_END_OF_FILE_INFO 0x0104
//
//TRANS2 commands
#define TRANS2_FIND_FIRST2 0x01
#define TRANS2_FIND_NEXT2 0x02
#define TRANS2_QUERY_FS_INFORMATION 0x03
#define TRANS2_QUERY_PATH_INFO 0x05
#define TRANS2_QUERY_FILE_INFORMATION 0x07
#define TRANS2_SET_FILE_INFORMATION 0x08
//
// Allocation functions
#ifndef NO_POOL_ALLOC
#define FID_INFO_ALLOC ce::singleton_allocator< ce::fixed_block_allocator<10>, sizeof(FID_INFO) >
#define AFS_FILEOBJECT_ALLOC ce::singleton_allocator< ce::fixed_block_allocator<10>, sizeof(FileObject) >
#define AFS_PERFILESTATE_ALLOC ce::singleton_allocator< ce::fixed_block_allocator<10>, sizeof(PerFileState) >
#define BLOCKED_HANDLES_ALLOC ce::singleton_allocator< ce::fixed_block_allocator<5>, sizeof(HANDLE) >
#else
#define FID_INFO_ALLOC ce::allocator
#define AFS_FILEOBJECT_ALLOC ce::allocator
#define AFS_PERFILESTATE_ALLOC ce::allocator
#define BLOCKED_HANDLES_ALLOC ce::allocator
#endif
//
// TRANS2 Query File Info
// Spec in cifs9f.doc
#define QFI_FILE_READ_DATA 0x000001
#define QFI_FILE_WRITE_DATA 0x000002
#define QFI_FILE_APPEND_DATA 0x000004
#define QFI_FILE_READ_EA 0x000008
#define QFI_FILE_WRITE_EA 0x000010
#define QFI_FILE_EXECUTE 0x000020
#define QFI_FILE_READ_ATTRIBUTES 0x000080
#define QFI_FILE_WRITE_ATTRIBUTES 0x000100
#define QFI_DELETE 0x010000
#define QFI_READ_CONTROL 0x020000
#define QFI_WRITE_DAC 0x040000
#define QFI_WRITE_OWNER 0x080000
#define QFI_SYNCHRONIZE 0x100000
#define QFI_FILE_WRITE_THROUGH 0x02
#define QFI_FILE_SEQUENTIAL_ONLY 0x04
#define QFI_FILE_SYNCHRONOUS_IO_ALERT 0x10
#define QFI_FILE_SYNCHRONOUS_IO_NONALERT 0x20
#define QFI_FILE_BYTE_ALIGNMENT 0x000
#define QFI_FILE_WORD_ALIGNMENT 0x001
#define QFI_FILE_LONG_ALIGNMENT 0x003
#define QFI_FILE_QUAD_ALIGNMENT 0x007
#define QFI_FILE_OCTA_ALIGNMENT 0x00f
#define QFI_FILE_32_BYTE_ALIGNMENT 0x01f
#define QFI_FILE_64_BYTE_ALIGNMENT 0x03f
#define QFI_FILE_128_BYTE_ALIGNMENT 0x07f
#define QFI_FILE_256_BYTE_ALIGNMENT 0x0ff
#define QFI_FILE_512_BYTE_ALIGNMENT 0x1ff
#define FILE_ATTRIBUTE_MUST_BE_DIR 0x10000000
#define FILE_ATTRIBUTE_CANT_BE_DIR 0x20000000
namespace SMB_FILE {
DWORD SMB_Com_CheckPath(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_Search(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_TRANS2(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_Query_Information(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_Query_Information_Disk(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_Query_EX_Information(SMB_PACKET *pSMB,
SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed);
DWORD SMB_Com_LockX(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_DeleteFile(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_RenameFile(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_NT_TRASACT(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_SetInformation(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_SetInformation2(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_Flush(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_MakeDirectory(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_DelDirectory(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_FindClose2(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
UINT *puiUsed,
SMB_PACKET *pSMB);
DWORD SMB_Com_NT_Cancel(SMB_PROCESS_CMD *_pRawRequest,
SMB_PROCESS_CMD *_pRawResponse,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -