mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-25 13:43:55 +08:00
smb3: move defines for query info and query fsinfo to smbfs_common
Includes moving to common code (from cifs and ksmbd protocol related headers) - query and query directory info levels and structs - set info structs - SMB2 lock struct and flags - SMB2 echo req Also shorten a few flag names (e.g. SMB2_LOCKFLAG_EXCLUSIVE_LOCK to SMB2_LOCKFLAG_EXCLUSIVE) Reviewed-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
15e7b6d753
commit
be13500043
@ -1646,7 +1646,7 @@ struct smb_t2_rsp {
|
||||
#define SMB_FIND_FILE_ID_FULL_DIR_INFO 0x105
|
||||
#define SMB_FIND_FILE_ID_BOTH_DIR_INFO 0x106
|
||||
#define SMB_FIND_FILE_UNIX 0x202
|
||||
#define SMB_FIND_FILE_POSIX_INFO 0x064
|
||||
/* #define SMB_FIND_FILE_POSIX_INFO 0x064 */
|
||||
|
||||
typedef struct smb_com_transaction2_qpi_req {
|
||||
struct smb_hdr hdr; /* wct = 14+ */
|
||||
|
@ -5840,8 +5840,8 @@ struct smb_version_values smb20_values = {
|
||||
.protocol_id = SMB20_PROT_ID,
|
||||
.req_capabilities = 0, /* MBZ */
|
||||
.large_lock_type = 0,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE_LOCK,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED,
|
||||
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
||||
.header_size = sizeof(struct smb2_hdr),
|
||||
.header_preamble_size = 0,
|
||||
@ -5861,8 +5861,8 @@ struct smb_version_values smb21_values = {
|
||||
.protocol_id = SMB21_PROT_ID,
|
||||
.req_capabilities = 0, /* MBZ on negotiate req until SMB3 dialect */
|
||||
.large_lock_type = 0,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE_LOCK,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED,
|
||||
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
||||
.header_size = sizeof(struct smb2_hdr),
|
||||
.header_preamble_size = 0,
|
||||
@ -5882,8 +5882,8 @@ struct smb_version_values smb3any_values = {
|
||||
.protocol_id = SMB302_PROT_ID, /* doesn't matter, send protocol array */
|
||||
.req_capabilities = SMB2_GLOBAL_CAP_DFS | SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_LARGE_MTU | SMB2_GLOBAL_CAP_PERSISTENT_HANDLES | SMB2_GLOBAL_CAP_ENCRYPTION | SMB2_GLOBAL_CAP_DIRECTORY_LEASING,
|
||||
.large_lock_type = 0,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE_LOCK,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED,
|
||||
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
||||
.header_size = sizeof(struct smb2_hdr),
|
||||
.header_preamble_size = 0,
|
||||
@ -5903,8 +5903,8 @@ struct smb_version_values smbdefault_values = {
|
||||
.protocol_id = SMB302_PROT_ID, /* doesn't matter, send protocol array */
|
||||
.req_capabilities = SMB2_GLOBAL_CAP_DFS | SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_LARGE_MTU | SMB2_GLOBAL_CAP_PERSISTENT_HANDLES | SMB2_GLOBAL_CAP_ENCRYPTION | SMB2_GLOBAL_CAP_DIRECTORY_LEASING,
|
||||
.large_lock_type = 0,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE_LOCK,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED,
|
||||
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
||||
.header_size = sizeof(struct smb2_hdr),
|
||||
.header_preamble_size = 0,
|
||||
@ -5924,8 +5924,8 @@ struct smb_version_values smb30_values = {
|
||||
.protocol_id = SMB30_PROT_ID,
|
||||
.req_capabilities = SMB2_GLOBAL_CAP_DFS | SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_LARGE_MTU | SMB2_GLOBAL_CAP_PERSISTENT_HANDLES | SMB2_GLOBAL_CAP_ENCRYPTION | SMB2_GLOBAL_CAP_DIRECTORY_LEASING,
|
||||
.large_lock_type = 0,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE_LOCK,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED,
|
||||
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
||||
.header_size = sizeof(struct smb2_hdr),
|
||||
.header_preamble_size = 0,
|
||||
@ -5945,8 +5945,8 @@ struct smb_version_values smb302_values = {
|
||||
.protocol_id = SMB302_PROT_ID,
|
||||
.req_capabilities = SMB2_GLOBAL_CAP_DFS | SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_LARGE_MTU | SMB2_GLOBAL_CAP_PERSISTENT_HANDLES | SMB2_GLOBAL_CAP_ENCRYPTION | SMB2_GLOBAL_CAP_DIRECTORY_LEASING,
|
||||
.large_lock_type = 0,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE_LOCK,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED,
|
||||
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
||||
.header_size = sizeof(struct smb2_hdr),
|
||||
.header_preamble_size = 0,
|
||||
@ -5966,8 +5966,8 @@ struct smb_version_values smb311_values = {
|
||||
.protocol_id = SMB311_PROT_ID,
|
||||
.req_capabilities = SMB2_GLOBAL_CAP_DFS | SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_LARGE_MTU | SMB2_GLOBAL_CAP_PERSISTENT_HANDLES | SMB2_GLOBAL_CAP_ENCRYPTION | SMB2_GLOBAL_CAP_DIRECTORY_LEASING,
|
||||
.large_lock_type = 0,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE_LOCK,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
|
||||
.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE,
|
||||
.shared_lock_type = SMB2_LOCKFLAG_SHARED,
|
||||
.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,
|
||||
.header_size = sizeof(struct smb2_hdr),
|
||||
.header_preamble_size = 0,
|
||||
|
@ -280,11 +280,6 @@ struct fsctl_get_integrity_information_rsp {
|
||||
__le32 ClusterSizeInBytes;
|
||||
} __packed;
|
||||
|
||||
struct file_allocated_range_buffer {
|
||||
__le64 file_offset;
|
||||
__le64 length;
|
||||
} __packed;
|
||||
|
||||
/* Integrity ChecksumAlgorithm choices for above */
|
||||
#define CHECKSUM_TYPE_NONE 0x0000
|
||||
#define CHECKSUM_TYPE_CRC64 0x0002
|
||||
@ -421,125 +416,6 @@ struct duplicate_extents_to_file {
|
||||
*/
|
||||
#define SMB2_IOCTL_IOV_SIZE 2
|
||||
|
||||
#define SMB2_LOCKFLAG_SHARED_LOCK 0x0001
|
||||
#define SMB2_LOCKFLAG_EXCLUSIVE_LOCK 0x0002
|
||||
#define SMB2_LOCKFLAG_UNLOCK 0x0004
|
||||
#define SMB2_LOCKFLAG_FAIL_IMMEDIATELY 0x0010
|
||||
|
||||
struct smb2_lock_element {
|
||||
__le64 Offset;
|
||||
__le64 Length;
|
||||
__le32 Flags;
|
||||
__le32 Reserved;
|
||||
} __packed;
|
||||
|
||||
struct smb2_lock_req {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 48 */
|
||||
__le16 LockCount;
|
||||
/*
|
||||
* The least significant four bits are the index, the other 28 bits are
|
||||
* the lock sequence number (0 to 64). See MS-SMB2 2.2.26
|
||||
*/
|
||||
__le32 LockSequenceNumber;
|
||||
__u64 PersistentFileId; /* opaque endianness */
|
||||
__u64 VolatileFileId; /* opaque endianness */
|
||||
/* Followed by at least one */
|
||||
struct smb2_lock_element locks[1];
|
||||
} __packed;
|
||||
|
||||
struct smb2_lock_rsp {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 4 */
|
||||
__le16 Reserved;
|
||||
} __packed;
|
||||
|
||||
struct smb2_echo_req {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 4 */
|
||||
__u16 Reserved;
|
||||
} __packed;
|
||||
|
||||
struct smb2_echo_rsp {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 4 */
|
||||
__u16 Reserved;
|
||||
} __packed;
|
||||
|
||||
/* search (query_directory) Flags field */
|
||||
#define SMB2_RESTART_SCANS 0x01
|
||||
#define SMB2_RETURN_SINGLE_ENTRY 0x02
|
||||
#define SMB2_INDEX_SPECIFIED 0x04
|
||||
#define SMB2_REOPEN 0x10
|
||||
|
||||
#define SMB2_QUERY_DIRECTORY_IOV_SIZE 2
|
||||
|
||||
/*
|
||||
* Valid FileInformation classes.
|
||||
*
|
||||
* Note that these are a subset of the (file) QUERY_INFO levels defined
|
||||
* later in this file (but since QUERY_DIRECTORY uses equivalent numbers
|
||||
* we do not redefine them here)
|
||||
*
|
||||
* FileDirectoryInfomation 0x01
|
||||
* FileFullDirectoryInformation 0x02
|
||||
* FileIdFullDirectoryInformation 0x26
|
||||
* FileBothDirectoryInformation 0x03
|
||||
* FileIdBothDirectoryInformation 0x25
|
||||
* FileNamesInformation 0x0C
|
||||
* FileIdExtdDirectoryInformation 0x3C
|
||||
*/
|
||||
|
||||
struct smb2_query_directory_req {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 33 */
|
||||
__u8 FileInformationClass;
|
||||
__u8 Flags;
|
||||
__le32 FileIndex;
|
||||
__u64 PersistentFileId; /* opaque endianness */
|
||||
__u64 VolatileFileId; /* opaque endianness */
|
||||
__le16 FileNameOffset;
|
||||
__le16 FileNameLength;
|
||||
__le32 OutputBufferLength;
|
||||
__u8 Buffer[1];
|
||||
} __packed;
|
||||
|
||||
struct smb2_query_directory_rsp {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 9 */
|
||||
__le16 OutputBufferOffset;
|
||||
__le32 OutputBufferLength;
|
||||
__u8 Buffer[1];
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* Maximum number of iovs we need for a set-info request.
|
||||
* The largest one is rename/hardlink
|
||||
* [0] : struct smb2_set_info_req + smb2_file_[rename|link]_info
|
||||
* [1] : path
|
||||
* [2] : compound padding
|
||||
*/
|
||||
#define SMB2_SET_INFO_IOV_SIZE 3
|
||||
|
||||
struct smb2_set_info_req {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 33 */
|
||||
__u8 InfoType;
|
||||
__u8 FileInfoClass;
|
||||
__le32 BufferLength;
|
||||
__le16 BufferOffset;
|
||||
__u16 Reserved;
|
||||
__le32 AdditionalInformation;
|
||||
__u64 PersistentFileId; /* opaque endianness */
|
||||
__u64 VolatileFileId; /* opaque endianness */
|
||||
__u8 Buffer[1];
|
||||
} __packed;
|
||||
|
||||
struct smb2_set_info_rsp {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 2 */
|
||||
} __packed;
|
||||
|
||||
struct smb2_oplock_break {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 24 */
|
||||
@ -576,132 +452,10 @@ struct smb2_lease_ack {
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* PDU infolevel structure definitions
|
||||
* PDU query infolevel structure definitions
|
||||
* BB consider moving to a different header
|
||||
*/
|
||||
|
||||
/* File System Information Classes */
|
||||
#define FS_VOLUME_INFORMATION 1 /* Query */
|
||||
#define FS_LABEL_INFORMATION 2 /* Local only */
|
||||
#define FS_SIZE_INFORMATION 3 /* Query */
|
||||
#define FS_DEVICE_INFORMATION 4 /* Query */
|
||||
#define FS_ATTRIBUTE_INFORMATION 5 /* Query */
|
||||
#define FS_CONTROL_INFORMATION 6 /* Query, Set */
|
||||
#define FS_FULL_SIZE_INFORMATION 7 /* Query */
|
||||
#define FS_OBJECT_ID_INFORMATION 8 /* Query, Set */
|
||||
#define FS_DRIVER_PATH_INFORMATION 9 /* Local only */
|
||||
#define FS_VOLUME_FLAGS_INFORMATION 10 /* Local only */
|
||||
#define FS_SECTOR_SIZE_INFORMATION 11 /* SMB3 or later. Query */
|
||||
#define FS_POSIX_INFORMATION 100 /* SMB3.1.1 POSIX. Query */
|
||||
|
||||
struct smb2_fs_full_size_info {
|
||||
__le64 TotalAllocationUnits;
|
||||
__le64 CallerAvailableAllocationUnits;
|
||||
__le64 ActualAvailableAllocationUnits;
|
||||
__le32 SectorsPerAllocationUnit;
|
||||
__le32 BytesPerSector;
|
||||
} __packed;
|
||||
|
||||
#define SSINFO_FLAGS_ALIGNED_DEVICE 0x00000001
|
||||
#define SSINFO_FLAGS_PARTITION_ALIGNED_ON_DEVICE 0x00000002
|
||||
#define SSINFO_FLAGS_NO_SEEK_PENALTY 0x00000004
|
||||
#define SSINFO_FLAGS_TRIM_ENABLED 0x00000008
|
||||
|
||||
/* sector size info struct */
|
||||
struct smb3_fs_ss_info {
|
||||
__le32 LogicalBytesPerSector;
|
||||
__le32 PhysicalBytesPerSectorForAtomicity;
|
||||
__le32 PhysicalBytesPerSectorForPerf;
|
||||
__le32 FileSystemEffectivePhysicalBytesPerSectorForAtomicity;
|
||||
__le32 Flags;
|
||||
__le32 ByteOffsetForSectorAlignment;
|
||||
__le32 ByteOffsetForPartitionAlignment;
|
||||
} __packed;
|
||||
|
||||
/* volume info struct - see MS-FSCC 2.5.9 */
|
||||
#define MAX_VOL_LABEL_LEN 32
|
||||
struct smb3_fs_vol_info {
|
||||
__le64 VolumeCreationTime;
|
||||
__u32 VolumeSerialNumber;
|
||||
__le32 VolumeLabelLength; /* includes trailing null */
|
||||
__u8 SupportsObjects; /* True if eg like NTFS, supports objects */
|
||||
__u8 Reserved;
|
||||
__u8 VolumeLabel[]; /* variable len */
|
||||
} __packed;
|
||||
|
||||
/* partial list of QUERY INFO levels */
|
||||
#define FILE_DIRECTORY_INFORMATION 1
|
||||
#define FILE_FULL_DIRECTORY_INFORMATION 2
|
||||
#define FILE_BOTH_DIRECTORY_INFORMATION 3
|
||||
#define FILE_BASIC_INFORMATION 4
|
||||
#define FILE_STANDARD_INFORMATION 5
|
||||
#define FILE_INTERNAL_INFORMATION 6
|
||||
#define FILE_EA_INFORMATION 7
|
||||
#define FILE_ACCESS_INFORMATION 8
|
||||
#define FILE_NAME_INFORMATION 9
|
||||
#define FILE_RENAME_INFORMATION 10
|
||||
#define FILE_LINK_INFORMATION 11
|
||||
#define FILE_NAMES_INFORMATION 12
|
||||
#define FILE_DISPOSITION_INFORMATION 13
|
||||
#define FILE_POSITION_INFORMATION 14
|
||||
#define FILE_FULL_EA_INFORMATION 15
|
||||
#define FILE_MODE_INFORMATION 16
|
||||
#define FILE_ALIGNMENT_INFORMATION 17
|
||||
#define FILE_ALL_INFORMATION 18
|
||||
#define FILE_ALLOCATION_INFORMATION 19
|
||||
#define FILE_END_OF_FILE_INFORMATION 20
|
||||
#define FILE_ALTERNATE_NAME_INFORMATION 21
|
||||
#define FILE_STREAM_INFORMATION 22
|
||||
#define FILE_PIPE_INFORMATION 23
|
||||
#define FILE_PIPE_LOCAL_INFORMATION 24
|
||||
#define FILE_PIPE_REMOTE_INFORMATION 25
|
||||
#define FILE_MAILSLOT_QUERY_INFORMATION 26
|
||||
#define FILE_MAILSLOT_SET_INFORMATION 27
|
||||
#define FILE_COMPRESSION_INFORMATION 28
|
||||
#define FILE_OBJECT_ID_INFORMATION 29
|
||||
/* Number 30 not defined in documents */
|
||||
#define FILE_MOVE_CLUSTER_INFORMATION 31
|
||||
#define FILE_QUOTA_INFORMATION 32
|
||||
#define FILE_REPARSE_POINT_INFORMATION 33
|
||||
#define FILE_NETWORK_OPEN_INFORMATION 34
|
||||
#define FILE_ATTRIBUTE_TAG_INFORMATION 35
|
||||
#define FILE_TRACKING_INFORMATION 36
|
||||
#define FILEID_BOTH_DIRECTORY_INFORMATION 37
|
||||
#define FILEID_FULL_DIRECTORY_INFORMATION 38
|
||||
#define FILE_VALID_DATA_LENGTH_INFORMATION 39
|
||||
#define FILE_SHORT_NAME_INFORMATION 40
|
||||
#define FILE_SFIO_RESERVE_INFORMATION 44
|
||||
#define FILE_SFIO_VOLUME_INFORMATION 45
|
||||
#define FILE_HARD_LINK_INFORMATION 46
|
||||
#define FILE_NORMALIZED_NAME_INFORMATION 48
|
||||
#define FILEID_GLOBAL_TX_DIRECTORY_INFORMATION 50
|
||||
#define FILE_STANDARD_LINK_INFORMATION 54
|
||||
#define FILE_ID_INFORMATION 59
|
||||
#define FILE_ID_EXTD_DIRECTORY_INFORMATION 60
|
||||
|
||||
struct smb2_file_internal_info {
|
||||
__le64 IndexNumber;
|
||||
} __packed; /* level 6 Query */
|
||||
|
||||
struct smb2_file_rename_info { /* encoding of request for level 10 */
|
||||
__u8 ReplaceIfExists; /* 1 = replace existing target with new */
|
||||
/* 0 = fail if target already exists */
|
||||
__u8 Reserved[7];
|
||||
__u64 RootDirectory; /* MBZ for network operations (why says spec?) */
|
||||
__le32 FileNameLength;
|
||||
char FileName[]; /* New name to be assigned */
|
||||
/* padding - overall struct size must be >= 24 so filename + pad >= 6 */
|
||||
} __packed; /* level 10 Set */
|
||||
|
||||
struct smb2_file_link_info { /* encoding of request for level 11 */
|
||||
__u8 ReplaceIfExists; /* 1 = replace existing link with new */
|
||||
/* 0 = fail if link already exists */
|
||||
__u8 Reserved[7];
|
||||
__u64 RootDirectory; /* MBZ for network operations (why says spec?) */
|
||||
__le32 FileNameLength;
|
||||
char FileName[]; /* Name to be assigned to new link */
|
||||
} __packed; /* level 11 Set */
|
||||
|
||||
struct smb2_file_full_ea_info { /* encoding of response for level 15 */
|
||||
__le32 next_entry_offset;
|
||||
__u8 flags;
|
||||
@ -710,38 +464,6 @@ struct smb2_file_full_ea_info { /* encoding of response for level 15 */
|
||||
char ea_data[]; /* \0 terminated name plus value */
|
||||
} __packed; /* level 15 Set */
|
||||
|
||||
/*
|
||||
* This level 18, although with struct with same name is different from cifs
|
||||
* level 0x107. Level 0x107 has an extra u64 between AccessFlags and
|
||||
* CurrentByteOffset.
|
||||
*/
|
||||
struct smb2_file_all_info { /* data block encoding of response to level 18 */
|
||||
__le64 CreationTime; /* Beginning of FILE_BASIC_INFO equivalent */
|
||||
__le64 LastAccessTime;
|
||||
__le64 LastWriteTime;
|
||||
__le64 ChangeTime;
|
||||
__le32 Attributes;
|
||||
__u32 Pad1; /* End of FILE_BASIC_INFO_INFO equivalent */
|
||||
__le64 AllocationSize; /* Beginning of FILE_STANDARD_INFO equivalent */
|
||||
__le64 EndOfFile; /* size ie offset to first free byte in file */
|
||||
__le32 NumberOfLinks; /* hard links */
|
||||
__u8 DeletePending;
|
||||
__u8 Directory;
|
||||
__u16 Pad2; /* End of FILE_STANDARD_INFO equivalent */
|
||||
__le64 IndexNumber;
|
||||
__le32 EASize;
|
||||
__le32 AccessFlags;
|
||||
__le64 CurrentByteOffset;
|
||||
__le32 Mode;
|
||||
__le32 AlignmentRequirement;
|
||||
__le32 FileNameLength;
|
||||
char FileName[1];
|
||||
} __packed; /* level 18 Query */
|
||||
|
||||
struct smb2_file_eof_info { /* encoding of request for level 10 */
|
||||
__le64 EndOfFile; /* new end of file value */
|
||||
} __packed; /* level 20 Set */
|
||||
|
||||
struct smb2_file_reparse_point_info {
|
||||
__le64 IndexNumber;
|
||||
__le32 Tag;
|
||||
@ -794,6 +516,8 @@ struct create_posix_rsp {
|
||||
struct cifs_sid group; /* var-sized on the wire */
|
||||
} __packed;
|
||||
|
||||
#define SMB2_QUERY_DIRECTORY_IOV_SIZE 2
|
||||
|
||||
/*
|
||||
* SMB2-only POSIX info level for query dir
|
||||
*
|
||||
@ -825,31 +549,6 @@ struct smb2_posix_info {
|
||||
*/
|
||||
} __packed;
|
||||
|
||||
/* Level 100 query info */
|
||||
struct smb311_posix_qinfo {
|
||||
__le64 CreationTime;
|
||||
__le64 LastAccessTime;
|
||||
__le64 LastWriteTime;
|
||||
__le64 ChangeTime;
|
||||
__le64 EndOfFile;
|
||||
__le64 AllocationSize;
|
||||
__le32 DosAttributes;
|
||||
__le64 Inode;
|
||||
__le32 DeviceId;
|
||||
__le32 Zero;
|
||||
/* beginning of POSIX Create Context Response */
|
||||
__le32 HardLinks;
|
||||
__le32 ReparseTag;
|
||||
__le32 Mode;
|
||||
u8 Sids[];
|
||||
/*
|
||||
* var sized owner SID
|
||||
* var sized group SID
|
||||
* le32 filenamelength
|
||||
* u8 filename[]
|
||||
*/
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* Parsed version of the above struct. Allows direct access to the
|
||||
* variable length fields
|
||||
|
@ -270,11 +270,6 @@ struct file_zero_data_information {
|
||||
__le64 BeyondFinalZero;
|
||||
} __packed;
|
||||
|
||||
struct file_allocated_range_buffer {
|
||||
__le64 file_offset;
|
||||
__le64 length;
|
||||
} __packed;
|
||||
|
||||
struct reparse_data_buffer {
|
||||
__le32 ReparseTag;
|
||||
__le16 ReparseDataLength;
|
||||
@ -282,106 +277,6 @@ struct reparse_data_buffer {
|
||||
__u8 DataBuffer[]; /* Variable Length */
|
||||
} __packed;
|
||||
|
||||
/* SMB2 Notify Action Flags */
|
||||
#define FILE_ACTION_ADDED 0x00000001
|
||||
#define FILE_ACTION_REMOVED 0x00000002
|
||||
#define FILE_ACTION_MODIFIED 0x00000003
|
||||
#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
|
||||
#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
|
||||
#define FILE_ACTION_ADDED_STREAM 0x00000006
|
||||
#define FILE_ACTION_REMOVED_STREAM 0x00000007
|
||||
#define FILE_ACTION_MODIFIED_STREAM 0x00000008
|
||||
#define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
|
||||
|
||||
#define SMB2_LOCKFLAG_SHARED 0x0001
|
||||
#define SMB2_LOCKFLAG_EXCLUSIVE 0x0002
|
||||
#define SMB2_LOCKFLAG_UNLOCK 0x0004
|
||||
#define SMB2_LOCKFLAG_FAIL_IMMEDIATELY 0x0010
|
||||
#define SMB2_LOCKFLAG_MASK 0x0007
|
||||
|
||||
struct smb2_lock_element {
|
||||
__le64 Offset;
|
||||
__le64 Length;
|
||||
__le32 Flags;
|
||||
__le32 Reserved;
|
||||
} __packed;
|
||||
|
||||
struct smb2_lock_req {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 48 */
|
||||
__le16 LockCount;
|
||||
__le32 Reserved;
|
||||
__u64 PersistentFileId;
|
||||
__u64 VolatileFileId;
|
||||
/* Followed by at least one */
|
||||
struct smb2_lock_element locks[1];
|
||||
} __packed;
|
||||
|
||||
struct smb2_lock_rsp {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 4 */
|
||||
__le16 Reserved;
|
||||
} __packed;
|
||||
|
||||
struct smb2_echo_req {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 4 */
|
||||
__u16 Reserved;
|
||||
} __packed;
|
||||
|
||||
struct smb2_echo_rsp {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 4 */
|
||||
__u16 Reserved;
|
||||
} __packed;
|
||||
|
||||
/* search (query_directory) Flags field */
|
||||
#define SMB2_RESTART_SCANS 0x01
|
||||
#define SMB2_RETURN_SINGLE_ENTRY 0x02
|
||||
#define SMB2_INDEX_SPECIFIED 0x04
|
||||
#define SMB2_REOPEN 0x10
|
||||
|
||||
struct smb2_query_directory_req {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 33 */
|
||||
__u8 FileInformationClass;
|
||||
__u8 Flags;
|
||||
__le32 FileIndex;
|
||||
__u64 PersistentFileId;
|
||||
__u64 VolatileFileId;
|
||||
__le16 FileNameOffset;
|
||||
__le16 FileNameLength;
|
||||
__le32 OutputBufferLength;
|
||||
__u8 Buffer[1];
|
||||
} __packed;
|
||||
|
||||
struct smb2_query_directory_rsp {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 9 */
|
||||
__le16 OutputBufferOffset;
|
||||
__le32 OutputBufferLength;
|
||||
__u8 Buffer[1];
|
||||
} __packed;
|
||||
|
||||
struct smb2_set_info_req {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 33 */
|
||||
__u8 InfoType;
|
||||
__u8 FileInfoClass;
|
||||
__le32 BufferLength;
|
||||
__le16 BufferOffset;
|
||||
__u16 Reserved;
|
||||
__le32 AdditionalInformation;
|
||||
__u64 PersistentFileId;
|
||||
__u64 VolatileFileId;
|
||||
__u8 Buffer[1];
|
||||
} __packed;
|
||||
|
||||
struct smb2_set_info_rsp {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 2 */
|
||||
} __packed;
|
||||
|
||||
/* FILE Info response size */
|
||||
#define FILE_DIRECTORY_INFORMATION_SIZE 1
|
||||
#define FILE_FULL_DIRECTORY_INFORMATION_SIZE 2
|
||||
@ -473,106 +368,10 @@ struct smb2_lease_ack {
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* PDU infolevel structure definitions
|
||||
* PDU query infolevel structure definitions
|
||||
* BB consider moving to a different header
|
||||
*/
|
||||
|
||||
/* File System Information Classes */
|
||||
#define FS_VOLUME_INFORMATION 1 /* Query */
|
||||
#define FS_LABEL_INFORMATION 2 /* Set */
|
||||
#define FS_SIZE_INFORMATION 3 /* Query */
|
||||
#define FS_DEVICE_INFORMATION 4 /* Query */
|
||||
#define FS_ATTRIBUTE_INFORMATION 5 /* Query */
|
||||
#define FS_CONTROL_INFORMATION 6 /* Query, Set */
|
||||
#define FS_FULL_SIZE_INFORMATION 7 /* Query */
|
||||
#define FS_OBJECT_ID_INFORMATION 8 /* Query, Set */
|
||||
#define FS_DRIVER_PATH_INFORMATION 9 /* Query */
|
||||
#define FS_SECTOR_SIZE_INFORMATION 11 /* SMB3 or later. Query */
|
||||
#define FS_POSIX_INFORMATION 100 /* SMB3.1.1 POSIX. Query */
|
||||
|
||||
struct smb2_fs_full_size_info {
|
||||
__le64 TotalAllocationUnits;
|
||||
__le64 CallerAvailableAllocationUnits;
|
||||
__le64 ActualAvailableAllocationUnits;
|
||||
__le32 SectorsPerAllocationUnit;
|
||||
__le32 BytesPerSector;
|
||||
} __packed;
|
||||
|
||||
#define SSINFO_FLAGS_ALIGNED_DEVICE 0x00000001
|
||||
#define SSINFO_FLAGS_PARTITION_ALIGNED_ON_DEVICE 0x00000002
|
||||
#define SSINFO_FLAGS_NO_SEEK_PENALTY 0x00000004
|
||||
#define SSINFO_FLAGS_TRIM_ENABLED 0x00000008
|
||||
|
||||
/* sector size info struct */
|
||||
struct smb3_fs_ss_info {
|
||||
__le32 LogicalBytesPerSector;
|
||||
__le32 PhysicalBytesPerSectorForAtomicity;
|
||||
__le32 PhysicalBytesPerSectorForPerf;
|
||||
__le32 FSEffPhysicalBytesPerSectorForAtomicity;
|
||||
__le32 Flags;
|
||||
__le32 ByteOffsetForSectorAlignment;
|
||||
__le32 ByteOffsetForPartitionAlignment;
|
||||
} __packed;
|
||||
|
||||
/* File System Control Information */
|
||||
struct smb2_fs_control_info {
|
||||
__le64 FreeSpaceStartFiltering;
|
||||
__le64 FreeSpaceThreshold;
|
||||
__le64 FreeSpaceStopFiltering;
|
||||
__le64 DefaultQuotaThreshold;
|
||||
__le64 DefaultQuotaLimit;
|
||||
__le32 FileSystemControlFlags;
|
||||
__le32 Padding;
|
||||
} __packed;
|
||||
|
||||
/* partial list of QUERY INFO levels */
|
||||
#define FILE_DIRECTORY_INFORMATION 1
|
||||
#define FILE_FULL_DIRECTORY_INFORMATION 2
|
||||
#define FILE_BOTH_DIRECTORY_INFORMATION 3
|
||||
#define FILE_BASIC_INFORMATION 4
|
||||
#define FILE_STANDARD_INFORMATION 5
|
||||
#define FILE_INTERNAL_INFORMATION 6
|
||||
#define FILE_EA_INFORMATION 7
|
||||
#define FILE_ACCESS_INFORMATION 8
|
||||
#define FILE_NAME_INFORMATION 9
|
||||
#define FILE_RENAME_INFORMATION 10
|
||||
#define FILE_LINK_INFORMATION 11
|
||||
#define FILE_NAMES_INFORMATION 12
|
||||
#define FILE_DISPOSITION_INFORMATION 13
|
||||
#define FILE_POSITION_INFORMATION 14
|
||||
#define FILE_FULL_EA_INFORMATION 15
|
||||
#define FILE_MODE_INFORMATION 16
|
||||
#define FILE_ALIGNMENT_INFORMATION 17
|
||||
#define FILE_ALL_INFORMATION 18
|
||||
#define FILE_ALLOCATION_INFORMATION 19
|
||||
#define FILE_END_OF_FILE_INFORMATION 20
|
||||
#define FILE_ALTERNATE_NAME_INFORMATION 21
|
||||
#define FILE_STREAM_INFORMATION 22
|
||||
#define FILE_PIPE_INFORMATION 23
|
||||
#define FILE_PIPE_LOCAL_INFORMATION 24
|
||||
#define FILE_PIPE_REMOTE_INFORMATION 25
|
||||
#define FILE_MAILSLOT_QUERY_INFORMATION 26
|
||||
#define FILE_MAILSLOT_SET_INFORMATION 27
|
||||
#define FILE_COMPRESSION_INFORMATION 28
|
||||
#define FILE_OBJECT_ID_INFORMATION 29
|
||||
/* Number 30 not defined in documents */
|
||||
#define FILE_MOVE_CLUSTER_INFORMATION 31
|
||||
#define FILE_QUOTA_INFORMATION 32
|
||||
#define FILE_REPARSE_POINT_INFORMATION 33
|
||||
#define FILE_NETWORK_OPEN_INFORMATION 34
|
||||
#define FILE_ATTRIBUTE_TAG_INFORMATION 35
|
||||
#define FILE_TRACKING_INFORMATION 36
|
||||
#define FILEID_BOTH_DIRECTORY_INFORMATION 37
|
||||
#define FILEID_FULL_DIRECTORY_INFORMATION 38
|
||||
#define FILE_VALID_DATA_LENGTH_INFORMATION 39
|
||||
#define FILE_SHORT_NAME_INFORMATION 40
|
||||
#define FILE_SFIO_RESERVE_INFORMATION 44
|
||||
#define FILE_SFIO_VOLUME_INFORMATION 45
|
||||
#define FILE_HARD_LINK_INFORMATION 46
|
||||
#define FILE_NORMALIZED_NAME_INFORMATION 48
|
||||
#define FILEID_GLOBAL_TX_DIRECTORY_INFORMATION 50
|
||||
#define FILE_STANDARD_LINK_INFORMATION 54
|
||||
|
||||
#define OP_BREAK_STRUCT_SIZE_20 24
|
||||
#define OP_BREAK_STRUCT_SIZE_21 36
|
||||
|
||||
@ -584,56 +383,6 @@ struct smb2_file_alignment_info {
|
||||
__le32 AlignmentRequirement;
|
||||
} __packed;
|
||||
|
||||
struct smb2_file_internal_info {
|
||||
__le64 IndexNumber;
|
||||
} __packed; /* level 6 Query */
|
||||
|
||||
struct smb2_file_rename_info { /* encoding of request for level 10 */
|
||||
__u8 ReplaceIfExists; /* 1 = replace existing target with new */
|
||||
/* 0 = fail if target already exists */
|
||||
__u8 Reserved[7];
|
||||
__u64 RootDirectory; /* MBZ for network operations (why says spec?) */
|
||||
__le32 FileNameLength;
|
||||
char FileName[0]; /* New name to be assigned */
|
||||
} __packed; /* level 10 Set */
|
||||
|
||||
struct smb2_file_link_info { /* encoding of request for level 11 */
|
||||
__u8 ReplaceIfExists; /* 1 = replace existing link with new */
|
||||
/* 0 = fail if link already exists */
|
||||
__u8 Reserved[7];
|
||||
__u64 RootDirectory; /* MBZ for network operations (why says spec?) */
|
||||
__le32 FileNameLength;
|
||||
char FileName[0]; /* Name to be assigned to new link */
|
||||
} __packed; /* level 11 Set */
|
||||
|
||||
/*
|
||||
* This level 18, although with struct with same name is different from cifs
|
||||
* level 0x107. Level 0x107 has an extra u64 between AccessFlags and
|
||||
* CurrentByteOffset.
|
||||
*/
|
||||
struct smb2_file_all_info { /* data block encoding of response to level 18 */
|
||||
__le64 CreationTime; /* Beginning of FILE_BASIC_INFO equivalent */
|
||||
__le64 LastAccessTime;
|
||||
__le64 LastWriteTime;
|
||||
__le64 ChangeTime;
|
||||
__le32 Attributes;
|
||||
__u32 Pad1; /* End of FILE_BASIC_INFO_INFO equivalent */
|
||||
__le64 AllocationSize; /* Beginning of FILE_STANDARD_INFO equivalent */
|
||||
__le64 EndOfFile; /* size ie offset to first free byte in file */
|
||||
__le32 NumberOfLinks; /* hard links */
|
||||
__u8 DeletePending;
|
||||
__u8 Directory;
|
||||
__u16 Pad2; /* End of FILE_STANDARD_INFO equivalent */
|
||||
__le64 IndexNumber;
|
||||
__le32 EASize;
|
||||
__le32 AccessFlags;
|
||||
__le64 CurrentByteOffset;
|
||||
__le32 Mode;
|
||||
__le32 AlignmentRequirement;
|
||||
__le32 FileNameLength;
|
||||
char FileName[1];
|
||||
} __packed; /* level 18 Query */
|
||||
|
||||
struct smb2_file_basic_info { /* data block encoding of response to level 18 */
|
||||
__le64 CreationTime; /* Beginning of FILE_BASIC_INFO equivalent */
|
||||
__le64 LastAccessTime;
|
||||
@ -656,10 +405,6 @@ struct smb2_file_stream_info {
|
||||
char StreamName[0];
|
||||
} __packed;
|
||||
|
||||
struct smb2_file_eof_info { /* encoding of request for level 10 */
|
||||
__le64 EndOfFile; /* new end of file value */
|
||||
} __packed; /* level 20 Set */
|
||||
|
||||
struct smb2_file_ntwrk_info {
|
||||
__le64 CreationTime;
|
||||
__le64 LastAccessTime;
|
||||
@ -750,34 +495,6 @@ struct create_sd_buf_req {
|
||||
struct smb_ntsd ntsd;
|
||||
} __packed;
|
||||
|
||||
/* Find File infolevels */
|
||||
#define SMB_FIND_FILE_POSIX_INFO 0x064
|
||||
|
||||
/* Level 100 query info */
|
||||
struct smb311_posix_qinfo {
|
||||
__le64 CreationTime;
|
||||
__le64 LastAccessTime;
|
||||
__le64 LastWriteTime;
|
||||
__le64 ChangeTime;
|
||||
__le64 EndOfFile;
|
||||
__le64 AllocationSize;
|
||||
__le32 DosAttributes;
|
||||
__le64 Inode;
|
||||
__le32 DeviceId;
|
||||
__le32 Zero;
|
||||
/* beginning of POSIX Create Context Response */
|
||||
__le32 HardLinks;
|
||||
__le32 ReparseTag;
|
||||
__le32 Mode;
|
||||
u8 Sids[];
|
||||
/*
|
||||
* var sized owner SID
|
||||
* var sized group SID
|
||||
* le32 filenamelength
|
||||
* u8 filename[]
|
||||
*/
|
||||
} __packed;
|
||||
|
||||
struct smb2_posix_info {
|
||||
__le32 NextEntryOffset;
|
||||
__u32 Ignored;
|
||||
|
@ -787,6 +787,123 @@ struct smb2_flush_rsp {
|
||||
__le16 Reserved;
|
||||
} __packed;
|
||||
|
||||
#define SMB2_LOCKFLAG_SHARED 0x0001
|
||||
#define SMB2_LOCKFLAG_EXCLUSIVE 0x0002
|
||||
#define SMB2_LOCKFLAG_UNLOCK 0x0004
|
||||
#define SMB2_LOCKFLAG_FAIL_IMMEDIATELY 0x0010
|
||||
#define SMB2_LOCKFLAG_MASK 0x0007
|
||||
|
||||
struct smb2_lock_element {
|
||||
__le64 Offset;
|
||||
__le64 Length;
|
||||
__le32 Flags;
|
||||
__le32 Reserved;
|
||||
} __packed;
|
||||
|
||||
struct smb2_lock_req {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 48 */
|
||||
__le16 LockCount;
|
||||
/*
|
||||
* The least significant four bits are the index, the other 28 bits are
|
||||
* the lock sequence number (0 to 64). See MS-SMB2 2.2.26
|
||||
*/
|
||||
__le32 LockSequenceNumber;
|
||||
__u64 PersistentFileId;
|
||||
__u64 VolatileFileId;
|
||||
/* Followed by at least one */
|
||||
struct smb2_lock_element locks[1];
|
||||
} __packed;
|
||||
|
||||
struct smb2_lock_rsp {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 4 */
|
||||
__le16 Reserved;
|
||||
} __packed;
|
||||
|
||||
struct smb2_echo_req {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 4 */
|
||||
__u16 Reserved;
|
||||
} __packed;
|
||||
|
||||
struct smb2_echo_rsp {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 4 */
|
||||
__u16 Reserved;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* Valid FileInformation classes for query directory
|
||||
*
|
||||
* Note that these are a subset of the (file) QUERY_INFO levels defined
|
||||
* later in this file (but since QUERY_DIRECTORY uses equivalent numbers
|
||||
* we do not redefine them here)
|
||||
*
|
||||
* FileDirectoryInfomation 0x01
|
||||
* FileFullDirectoryInformation 0x02
|
||||
* FileIdFullDirectoryInformation 0x26
|
||||
* FileBothDirectoryInformation 0x03
|
||||
* FileIdBothDirectoryInformation 0x25
|
||||
* FileNamesInformation 0x0C
|
||||
* FileIdExtdDirectoryInformation 0x3C
|
||||
*/
|
||||
|
||||
/* search (query_directory) Flags field */
|
||||
#define SMB2_RESTART_SCANS 0x01
|
||||
#define SMB2_RETURN_SINGLE_ENTRY 0x02
|
||||
#define SMB2_INDEX_SPECIFIED 0x04
|
||||
#define SMB2_REOPEN 0x10
|
||||
|
||||
struct smb2_query_directory_req {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 33 */
|
||||
__u8 FileInformationClass;
|
||||
__u8 Flags;
|
||||
__le32 FileIndex;
|
||||
__u64 PersistentFileId;
|
||||
__u64 VolatileFileId;
|
||||
__le16 FileNameOffset;
|
||||
__le16 FileNameLength;
|
||||
__le32 OutputBufferLength;
|
||||
__u8 Buffer[1];
|
||||
} __packed;
|
||||
|
||||
struct smb2_query_directory_rsp {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 9 */
|
||||
__le16 OutputBufferOffset;
|
||||
__le32 OutputBufferLength;
|
||||
__u8 Buffer[1];
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* Maximum number of iovs we need for a set-info request.
|
||||
* The largest one is rename/hardlink
|
||||
* [0] : struct smb2_set_info_req + smb2_file_[rename|link]_info
|
||||
* [1] : path
|
||||
* [2] : compound padding
|
||||
*/
|
||||
#define SMB2_SET_INFO_IOV_SIZE 3
|
||||
|
||||
struct smb2_set_info_req {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 33 */
|
||||
__u8 InfoType;
|
||||
__u8 FileInfoClass;
|
||||
__le32 BufferLength;
|
||||
__le16 BufferOffset;
|
||||
__u16 Reserved;
|
||||
__le32 AdditionalInformation;
|
||||
__u64 PersistentFileId;
|
||||
__u64 VolatileFileId;
|
||||
__u8 Buffer[1];
|
||||
} __packed;
|
||||
|
||||
struct smb2_set_info_rsp {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 2 */
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* SMB2_NOTIFY See MS-SMB2 section 2.2.35
|
||||
@ -1129,6 +1246,58 @@ struct smb2_ioctl_rsp {
|
||||
|
||||
/* SMB2 Query Info see MS-SMB2 (2.2.37) or MS-DTYP */
|
||||
|
||||
/* List of QUERY INFO levels (those also valid for QUERY_DIR are noted below */
|
||||
#define FILE_DIRECTORY_INFORMATION 1 /* also for QUERY_DIR */
|
||||
#define FILE_FULL_DIRECTORY_INFORMATION 2 /* also for QUERY_DIR */
|
||||
#define FILE_BOTH_DIRECTORY_INFORMATION 3 /* also for QUERY_DIR */
|
||||
#define FILE_BASIC_INFORMATION 4
|
||||
#define FILE_STANDARD_INFORMATION 5
|
||||
#define FILE_INTERNAL_INFORMATION 6
|
||||
#define FILE_EA_INFORMATION 7
|
||||
#define FILE_ACCESS_INFORMATION 8
|
||||
#define FILE_NAME_INFORMATION 9
|
||||
#define FILE_RENAME_INFORMATION 10
|
||||
#define FILE_LINK_INFORMATION 11
|
||||
#define FILE_NAMES_INFORMATION 12 /* also for QUERY_DIR */
|
||||
#define FILE_DISPOSITION_INFORMATION 13
|
||||
#define FILE_POSITION_INFORMATION 14
|
||||
#define FILE_FULL_EA_INFORMATION 15
|
||||
#define FILE_MODE_INFORMATION 16
|
||||
#define FILE_ALIGNMENT_INFORMATION 17
|
||||
#define FILE_ALL_INFORMATION 18
|
||||
#define FILE_ALLOCATION_INFORMATION 19
|
||||
#define FILE_END_OF_FILE_INFORMATION 20
|
||||
#define FILE_ALTERNATE_NAME_INFORMATION 21
|
||||
#define FILE_STREAM_INFORMATION 22
|
||||
#define FILE_PIPE_INFORMATION 23
|
||||
#define FILE_PIPE_LOCAL_INFORMATION 24
|
||||
#define FILE_PIPE_REMOTE_INFORMATION 25
|
||||
#define FILE_MAILSLOT_QUERY_INFORMATION 26
|
||||
#define FILE_MAILSLOT_SET_INFORMATION 27
|
||||
#define FILE_COMPRESSION_INFORMATION 28
|
||||
#define FILE_OBJECT_ID_INFORMATION 29
|
||||
/* Number 30 not defined in documents */
|
||||
#define FILE_MOVE_CLUSTER_INFORMATION 31
|
||||
#define FILE_QUOTA_INFORMATION 32
|
||||
#define FILE_REPARSE_POINT_INFORMATION 33
|
||||
#define FILE_NETWORK_OPEN_INFORMATION 34
|
||||
#define FILE_ATTRIBUTE_TAG_INFORMATION 35
|
||||
#define FILE_TRACKING_INFORMATION 36
|
||||
#define FILEID_BOTH_DIRECTORY_INFORMATION 37 /* also for QUERY_DIR */
|
||||
#define FILEID_FULL_DIRECTORY_INFORMATION 38 /* also for QUERY_DIR */
|
||||
#define FILE_VALID_DATA_LENGTH_INFORMATION 39
|
||||
#define FILE_SHORT_NAME_INFORMATION 40
|
||||
#define FILE_SFIO_RESERVE_INFORMATION 44
|
||||
#define FILE_SFIO_VOLUME_INFORMATION 45
|
||||
#define FILE_HARD_LINK_INFORMATION 46
|
||||
#define FILE_NORMALIZED_NAME_INFORMATION 48
|
||||
#define FILEID_GLOBAL_TX_DIRECTORY_INFORMATION 50
|
||||
#define FILE_STANDARD_LINK_INFORMATION 54
|
||||
#define FILE_ID_INFORMATION 59
|
||||
#define FILE_ID_EXTD_DIRECTORY_INFORMATION 60 /* also for QUERY_DIR */
|
||||
/* Used for Query Info and Find File POSIX Info for SMB3.1.1 and SMB1 */
|
||||
#define SMB_FIND_FILE_POSIX_INFO 0x064
|
||||
|
||||
/* Security info type additionalinfo flags. */
|
||||
#define OWNER_SECINFO 0x00000001
|
||||
#define GROUP_SECINFO 0x00000002
|
||||
@ -1172,4 +1341,151 @@ struct smb2_query_info_rsp {
|
||||
__u8 Buffer[1];
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* PDU query infolevel structure definitions
|
||||
*/
|
||||
|
||||
struct file_allocated_range_buffer {
|
||||
__le64 file_offset;
|
||||
__le64 length;
|
||||
} __packed;
|
||||
|
||||
struct smb2_file_internal_info {
|
||||
__le64 IndexNumber;
|
||||
} __packed; /* level 6 Query */
|
||||
|
||||
struct smb2_file_rename_info { /* encoding of request for level 10 */
|
||||
__u8 ReplaceIfExists; /* 1 = replace existing target with new */
|
||||
/* 0 = fail if target already exists */
|
||||
__u8 Reserved[7];
|
||||
__u64 RootDirectory; /* MBZ for network operations (why says spec?) */
|
||||
__le32 FileNameLength;
|
||||
char FileName[]; /* New name to be assigned */
|
||||
/* padding - overall struct size must be >= 24 so filename + pad >= 6 */
|
||||
} __packed; /* level 10 Set */
|
||||
|
||||
struct smb2_file_link_info { /* encoding of request for level 11 */
|
||||
__u8 ReplaceIfExists; /* 1 = replace existing link with new */
|
||||
/* 0 = fail if link already exists */
|
||||
__u8 Reserved[7];
|
||||
__u64 RootDirectory; /* MBZ for network operations (why says spec?) */
|
||||
__le32 FileNameLength;
|
||||
char FileName[]; /* Name to be assigned to new link */
|
||||
} __packed; /* level 11 Set */
|
||||
|
||||
/*
|
||||
* This level 18, although with struct with same name is different from cifs
|
||||
* level 0x107. Level 0x107 has an extra u64 between AccessFlags and
|
||||
* CurrentByteOffset.
|
||||
*/
|
||||
struct smb2_file_all_info { /* data block encoding of response to level 18 */
|
||||
__le64 CreationTime; /* Beginning of FILE_BASIC_INFO equivalent */
|
||||
__le64 LastAccessTime;
|
||||
__le64 LastWriteTime;
|
||||
__le64 ChangeTime;
|
||||
__le32 Attributes;
|
||||
__u32 Pad1; /* End of FILE_BASIC_INFO_INFO equivalent */
|
||||
__le64 AllocationSize; /* Beginning of FILE_STANDARD_INFO equivalent */
|
||||
__le64 EndOfFile; /* size ie offset to first free byte in file */
|
||||
__le32 NumberOfLinks; /* hard links */
|
||||
__u8 DeletePending;
|
||||
__u8 Directory;
|
||||
__u16 Pad2; /* End of FILE_STANDARD_INFO equivalent */
|
||||
__le64 IndexNumber;
|
||||
__le32 EASize;
|
||||
__le32 AccessFlags;
|
||||
__le64 CurrentByteOffset;
|
||||
__le32 Mode;
|
||||
__le32 AlignmentRequirement;
|
||||
__le32 FileNameLength;
|
||||
char FileName[1];
|
||||
} __packed; /* level 18 Query */
|
||||
|
||||
struct smb2_file_eof_info { /* encoding of request for level 10 */
|
||||
__le64 EndOfFile; /* new end of file value */
|
||||
} __packed; /* level 20 Set */
|
||||
|
||||
/* Level 100 query info */
|
||||
struct smb311_posix_qinfo {
|
||||
__le64 CreationTime;
|
||||
__le64 LastAccessTime;
|
||||
__le64 LastWriteTime;
|
||||
__le64 ChangeTime;
|
||||
__le64 EndOfFile;
|
||||
__le64 AllocationSize;
|
||||
__le32 DosAttributes;
|
||||
__le64 Inode;
|
||||
__le32 DeviceId;
|
||||
__le32 Zero;
|
||||
/* beginning of POSIX Create Context Response */
|
||||
__le32 HardLinks;
|
||||
__le32 ReparseTag;
|
||||
__le32 Mode;
|
||||
u8 Sids[];
|
||||
/*
|
||||
* var sized owner SID
|
||||
* var sized group SID
|
||||
* le32 filenamelength
|
||||
* u8 filename[]
|
||||
*/
|
||||
} __packed;
|
||||
|
||||
/* File System Information Classes */
|
||||
#define FS_VOLUME_INFORMATION 1 /* Query */
|
||||
#define FS_LABEL_INFORMATION 2 /* Set */
|
||||
#define FS_SIZE_INFORMATION 3 /* Query */
|
||||
#define FS_DEVICE_INFORMATION 4 /* Query */
|
||||
#define FS_ATTRIBUTE_INFORMATION 5 /* Query */
|
||||
#define FS_CONTROL_INFORMATION 6 /* Query, Set */
|
||||
#define FS_FULL_SIZE_INFORMATION 7 /* Query */
|
||||
#define FS_OBJECT_ID_INFORMATION 8 /* Query, Set */
|
||||
#define FS_DRIVER_PATH_INFORMATION 9 /* Query */
|
||||
#define FS_SECTOR_SIZE_INFORMATION 11 /* SMB3 or later. Query */
|
||||
#define FS_POSIX_INFORMATION 100 /* SMB3.1.1 POSIX. Query */
|
||||
|
||||
struct smb2_fs_full_size_info {
|
||||
__le64 TotalAllocationUnits;
|
||||
__le64 CallerAvailableAllocationUnits;
|
||||
__le64 ActualAvailableAllocationUnits;
|
||||
__le32 SectorsPerAllocationUnit;
|
||||
__le32 BytesPerSector;
|
||||
} __packed;
|
||||
|
||||
#define SSINFO_FLAGS_ALIGNED_DEVICE 0x00000001
|
||||
#define SSINFO_FLAGS_PARTITION_ALIGNED_ON_DEVICE 0x00000002
|
||||
#define SSINFO_FLAGS_NO_SEEK_PENALTY 0x00000004
|
||||
#define SSINFO_FLAGS_TRIM_ENABLED 0x00000008
|
||||
|
||||
/* sector size info struct */
|
||||
struct smb3_fs_ss_info {
|
||||
__le32 LogicalBytesPerSector;
|
||||
__le32 PhysicalBytesPerSectorForAtomicity;
|
||||
__le32 PhysicalBytesPerSectorForPerf;
|
||||
__le32 FSEffPhysicalBytesPerSectorForAtomicity;
|
||||
__le32 Flags;
|
||||
__le32 ByteOffsetForSectorAlignment;
|
||||
__le32 ByteOffsetForPartitionAlignment;
|
||||
} __packed;
|
||||
|
||||
/* File System Control Information */
|
||||
struct smb2_fs_control_info {
|
||||
__le64 FreeSpaceStartFiltering;
|
||||
__le64 FreeSpaceThreshold;
|
||||
__le64 FreeSpaceStopFiltering;
|
||||
__le64 DefaultQuotaThreshold;
|
||||
__le64 DefaultQuotaLimit;
|
||||
__le32 FileSystemControlFlags;
|
||||
__le32 Padding;
|
||||
} __packed;
|
||||
|
||||
/* volume info struct - see MS-FSCC 2.5.9 */
|
||||
#define MAX_VOL_LABEL_LEN 32
|
||||
struct smb3_fs_vol_info {
|
||||
__le64 VolumeCreationTime;
|
||||
__u32 VolumeSerialNumber;
|
||||
__le32 VolumeLabelLength; /* includes trailing null */
|
||||
__u8 SupportsObjects; /* True if eg like NTFS, supports objects */
|
||||
__u8 Reserved;
|
||||
__u8 VolumeLabel[]; /* variable len */
|
||||
} __packed;
|
||||
#endif /* _COMMON_SMB2PDU_H */
|
||||
|
Loading…
Reference in New Issue
Block a user