⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileserver.h

📁 Windows CE 6.0 Server 源码
💻 H
📖 第 1 页 / 共 2 页
字号:
//
// 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 + -