| 1 | /* 
 | 
|---|
| 2 |    Unix SMB/CIFS implementation.
 | 
|---|
| 3 |    SMB transaction2 handling
 | 
|---|
| 4 |    Copyright (C) Jeremy Allison 1994-2002.
 | 
|---|
| 5 |    Copyright (C) Andrew Tridgell 1995-2003.
 | 
|---|
| 6 |    Copyright (C) James Peach 2007
 | 
|---|
| 7 | 
 | 
|---|
| 8 |    This program is free software; you can redistribute it and/or modify
 | 
|---|
| 9 |    it under the terms of the GNU General Public License as published by
 | 
|---|
| 10 |    the Free Software Foundation; either version 3 of the License, or
 | 
|---|
| 11 |    (at your option) any later version.
 | 
|---|
| 12 |    
 | 
|---|
| 13 |    This program is distributed in the hope that it will be useful,
 | 
|---|
| 14 |    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
|---|
| 15 |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
|---|
| 16 |    GNU General Public License for more details.
 | 
|---|
| 17 |    
 | 
|---|
| 18 |    You should have received a copy of the GNU General Public License
 | 
|---|
| 19 |    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
|---|
| 20 | */
 | 
|---|
| 21 | 
 | 
|---|
| 22 | #ifndef _TRANS2_H_
 | 
|---|
| 23 | #define _TRANS2_H_
 | 
|---|
| 24 | 
 | 
|---|
| 25 | /* These are the TRANS2 sub commands */
 | 
|---|
| 26 | #define TRANSACT2_OPEN                        0
 | 
|---|
| 27 | #define TRANSACT2_FINDFIRST                   1
 | 
|---|
| 28 | #define TRANSACT2_FINDNEXT                    2
 | 
|---|
| 29 | #define TRANSACT2_QFSINFO                     3
 | 
|---|
| 30 | #define TRANSACT2_SETFSINFO                   4
 | 
|---|
| 31 | #define TRANSACT2_QPATHINFO                   5
 | 
|---|
| 32 | #define TRANSACT2_SETPATHINFO                 6
 | 
|---|
| 33 | #define TRANSACT2_QFILEINFO                   7
 | 
|---|
| 34 | #define TRANSACT2_SETFILEINFO                 8
 | 
|---|
| 35 | #define TRANSACT2_FSCTL                       9
 | 
|---|
| 36 | #define TRANSACT2_IOCTL                     0xA
 | 
|---|
| 37 | #define TRANSACT2_FINDNOTIFYFIRST           0xB
 | 
|---|
| 38 | #define TRANSACT2_FINDNOTIFYNEXT            0xC
 | 
|---|
| 39 | #define TRANSACT2_MKDIR                     0xD
 | 
|---|
| 40 | #define TRANSACT2_SESSION_SETUP             0xE
 | 
|---|
| 41 | #define TRANSACT2_GET_DFS_REFERRAL         0x10
 | 
|---|
| 42 | #define TRANSACT2_REPORT_DFS_INCONSISTANCY 0x11
 | 
|---|
| 43 | 
 | 
|---|
| 44 | 
 | 
|---|
| 45 | /* trans2 Query FS info levels */
 | 
|---|
| 46 | /*
 | 
|---|
| 47 | w2k3 TRANS2ALIASES:
 | 
|---|
| 48 | Checking for QFSINFO aliases
 | 
|---|
| 49 |         Found level    1 (0x001) of size 18 (0x12)
 | 
|---|
| 50 |         Found level    2 (0x002) of size 12 (0x0c)
 | 
|---|
| 51 |         Found level  258 (0x102) of size 26 (0x1a)
 | 
|---|
| 52 |         Found level  259 (0x103) of size 24 (0x18)
 | 
|---|
| 53 |         Found level  260 (0x104) of size  8 (0x08)
 | 
|---|
| 54 |         Found level  261 (0x105) of size 20 (0x14)
 | 
|---|
| 55 |         Found level 1001 (0x3e9) of size 26 (0x1a)
 | 
|---|
| 56 |         Found level 1003 (0x3eb) of size 24 (0x18)
 | 
|---|
| 57 |         Found level 1004 (0x3ec) of size  8 (0x08)
 | 
|---|
| 58 |         Found level 1005 (0x3ed) of size 20 (0x14)
 | 
|---|
| 59 |         Found level 1006 (0x3ee) of size 48 (0x30)
 | 
|---|
| 60 |         Found level 1007 (0x3ef) of size 32 (0x20)
 | 
|---|
| 61 |         Found level 1008 (0x3f0) of size 64 (0x40)
 | 
|---|
| 62 | Found 13 levels with success status
 | 
|---|
| 63 |         Level 261 (0x105) and level 1005 (0x3ed) are possible aliases
 | 
|---|
| 64 |         Level 260 (0x104) and level 1004 (0x3ec) are possible aliases
 | 
|---|
| 65 |         Level 259 (0x103) and level 1003 (0x3eb) are possible aliases
 | 
|---|
| 66 |         Level 258 (0x102) and level 1001 (0x3e9) are possible aliases
 | 
|---|
| 67 | Found 4 aliased levels
 | 
|---|
| 68 | */
 | 
|---|
| 69 | #define SMB_QFS_ALLOCATION                                 1
 | 
|---|
| 70 | #define SMB_QFS_VOLUME                                     2
 | 
|---|
| 71 | #define SMB_QFS_VOLUME_INFO                            0x102
 | 
|---|
| 72 | #define SMB_QFS_SIZE_INFO                              0x103
 | 
|---|
| 73 | #define SMB_QFS_DEVICE_INFO                            0x104
 | 
|---|
| 74 | #define SMB_QFS_ATTRIBUTE_INFO                         0x105
 | 
|---|
| 75 | #define SMB_QFS_UNIX_INFO                              0x200
 | 
|---|
| 76 | #define SMB_QFS_POSIX_INFO                             0x201
 | 
|---|
| 77 | #define SMB_QFS_POSIX_WHOAMI                           0x202
 | 
|---|
| 78 | #define SMB_QFS_VOLUME_INFORMATION                      1001
 | 
|---|
| 79 | #define SMB_QFS_SIZE_INFORMATION                        1003
 | 
|---|
| 80 | #define SMB_QFS_DEVICE_INFORMATION                      1004
 | 
|---|
| 81 | #define SMB_QFS_ATTRIBUTE_INFORMATION                   1005
 | 
|---|
| 82 | #define SMB_QFS_QUOTA_INFORMATION                       1006
 | 
|---|
| 83 | #define SMB_QFS_FULL_SIZE_INFORMATION                   1007
 | 
|---|
| 84 | #define SMB_QFS_OBJECTID_INFORMATION                    1008
 | 
|---|
| 85 | 
 | 
|---|
| 86 | 
 | 
|---|
| 87 | /* trans2 qfileinfo/qpathinfo */
 | 
|---|
| 88 | /* w2k3 TRANS2ALIASES:
 | 
|---|
| 89 | Checking for QPATHINFO aliases
 | 
|---|
| 90 | setting up complex file \qpathinfo_aliases.txt
 | 
|---|
| 91 |         Found level    1 (0x001) of size  22 (0x16)
 | 
|---|
| 92 |         Found level    2 (0x002) of size  26 (0x1a)
 | 
|---|
| 93 |         Found level    4 (0x004) of size  41 (0x29)
 | 
|---|
| 94 |         Found level    6 (0x006) of size   0 (0x00)
 | 
|---|
| 95 |         Found level  257 (0x101) of size  40 (0x28)
 | 
|---|
| 96 |         Found level  258 (0x102) of size  24 (0x18)
 | 
|---|
| 97 |         Found level  259 (0x103) of size   4 (0x04)
 | 
|---|
| 98 |         Found level  260 (0x104) of size  48 (0x30)
 | 
|---|
| 99 |         Found level  263 (0x107) of size 126 (0x7e)
 | 
|---|
| 100 |         Found level  264 (0x108) of size  28 (0x1c)
 | 
|---|
| 101 |         Found level  265 (0x109) of size  38 (0x26)
 | 
|---|
| 102 |         Found level  267 (0x10b) of size  16 (0x10)
 | 
|---|
| 103 |         Found level 1004 (0x3ec) of size  40 (0x28)
 | 
|---|
| 104 |         Found level 1005 (0x3ed) of size  24 (0x18)
 | 
|---|
| 105 |         Found level 1006 (0x3ee) of size   8 (0x08)
 | 
|---|
| 106 |         Found level 1007 (0x3ef) of size   4 (0x04)
 | 
|---|
| 107 |         Found level 1008 (0x3f0) of size   4 (0x04)
 | 
|---|
| 108 |         Found level 1009 (0x3f1) of size  48 (0x30)
 | 
|---|
| 109 |         Found level 1014 (0x3f6) of size   8 (0x08)
 | 
|---|
| 110 |         Found level 1016 (0x3f8) of size   4 (0x04)
 | 
|---|
| 111 |         Found level 1017 (0x3f9) of size   4 (0x04)
 | 
|---|
| 112 |         Found level 1018 (0x3fa) of size 126 (0x7e)
 | 
|---|
| 113 |         Found level 1021 (0x3fd) of size  28 (0x1c)
 | 
|---|
| 114 |         Found level 1022 (0x3fe) of size  38 (0x26)
 | 
|---|
| 115 |         Found level 1028 (0x404) of size  16 (0x10)
 | 
|---|
| 116 |         Found level 1034 (0x40a) of size  56 (0x38)
 | 
|---|
| 117 |         Found level 1035 (0x40b) of size   8 (0x08)
 | 
|---|
| 118 | Found 27 levels with success status
 | 
|---|
| 119 |         Level 267 (0x10b) and level 1028 (0x404) are possible aliases
 | 
|---|
| 120 |         Level 265 (0x109) and level 1022 (0x3fe) are possible aliases
 | 
|---|
| 121 |         Level 264 (0x108) and level 1021 (0x3fd) are possible aliases
 | 
|---|
| 122 |         Level 263 (0x107) and level 1018 (0x3fa) are possible aliases
 | 
|---|
| 123 |         Level 260 (0x104) and level 1009 (0x3f1) are possible aliases
 | 
|---|
| 124 |         Level 259 (0x103) and level 1007 (0x3ef) are possible aliases
 | 
|---|
| 125 |         Level 258 (0x102) and level 1005 (0x3ed) are possible aliases
 | 
|---|
| 126 |         Level 257 (0x101) and level 1004 (0x3ec) are possible aliases
 | 
|---|
| 127 | Found 8 aliased levels
 | 
|---|
| 128 | */
 | 
|---|
| 129 | #define SMB_QFILEINFO_STANDARD                             1
 | 
|---|
| 130 | #define SMB_QFILEINFO_EA_SIZE                              2
 | 
|---|
| 131 | #define SMB_QFILEINFO_EA_LIST                              3
 | 
|---|
| 132 | #define SMB_QFILEINFO_ALL_EAS                              4
 | 
|---|
| 133 | #define SMB_QFILEINFO_IS_NAME_VALID                        6  /* only for QPATHINFO */
 | 
|---|
| 134 | #define SMB_QFILEINFO_BASIC_INFO                       0x101
 | 
|---|
| 135 | #define SMB_QFILEINFO_STANDARD_INFO                    0x102
 | 
|---|
| 136 | #define SMB_QFILEINFO_EA_INFO                          0x103
 | 
|---|
| 137 | #define SMB_QFILEINFO_NAME_INFO                        0x104
 | 
|---|
| 138 | #define SMB_QFILEINFO_ALL_INFO                         0x107
 | 
|---|
| 139 | #define SMB_QFILEINFO_ALT_NAME_INFO                    0x108
 | 
|---|
| 140 | #define SMB_QFILEINFO_STREAM_INFO                      0x109
 | 
|---|
| 141 | #define SMB_QFILEINFO_COMPRESSION_INFO                 0x10b
 | 
|---|
| 142 | #define SMB_QFILEINFO_UNIX_BASIC                       0x200
 | 
|---|
| 143 | #define SMB_QFILEINFO_UNIX_LINK                        0x201
 | 
|---|
| 144 | #define SMB_QFILEINFO_UNIX_INFO2                       0x20b
 | 
|---|
| 145 | #define SMB_QFILEINFO_BASIC_INFORMATION                 1004
 | 
|---|
| 146 | #define SMB_QFILEINFO_STANDARD_INFORMATION              1005
 | 
|---|
| 147 | #define SMB_QFILEINFO_INTERNAL_INFORMATION              1006
 | 
|---|
| 148 | #define SMB_QFILEINFO_EA_INFORMATION                    1007
 | 
|---|
| 149 | #define SMB_QFILEINFO_ACCESS_INFORMATION                1008
 | 
|---|
| 150 | #define SMB_QFILEINFO_NAME_INFORMATION                  1009
 | 
|---|
| 151 | #define SMB_QFILEINFO_POSITION_INFORMATION              1014
 | 
|---|
| 152 | #define SMB_QFILEINFO_MODE_INFORMATION                  1016
 | 
|---|
| 153 | #define SMB_QFILEINFO_ALIGNMENT_INFORMATION             1017
 | 
|---|
| 154 | #define SMB_QFILEINFO_ALL_INFORMATION                   1018
 | 
|---|
| 155 | #define SMB_QFILEINFO_ALT_NAME_INFORMATION              1021
 | 
|---|
| 156 | #define SMB_QFILEINFO_STREAM_INFORMATION                1022
 | 
|---|
| 157 | #define SMB_QFILEINFO_COMPRESSION_INFORMATION           1028
 | 
|---|
| 158 | #define SMB_QFILEINFO_NETWORK_OPEN_INFORMATION          1034
 | 
|---|
| 159 | #define SMB_QFILEINFO_ATTRIBUTE_TAG_INFORMATION         1035
 | 
|---|
| 160 | 
 | 
|---|
| 161 | 
 | 
|---|
| 162 | 
 | 
|---|
| 163 | /* trans2 setfileinfo/setpathinfo levels */
 | 
|---|
| 164 | /*
 | 
|---|
| 165 | w2k3 TRANS2ALIASES
 | 
|---|
| 166 | Checking for SETFILEINFO aliases
 | 
|---|
| 167 | setting up complex file \setfileinfo_aliases.txt
 | 
|---|
| 168 |         Found level    1 (0x001) of size   2 (0x02)
 | 
|---|
| 169 |         Found level    2 (0x002) of size   2 (0x02)
 | 
|---|
| 170 |         Found level  257 (0x101) of size  40 (0x28)
 | 
|---|
| 171 |         Found level  258 (0x102) of size   2 (0x02)
 | 
|---|
| 172 |         Found level  259 (0x103) of size   8 (0x08)
 | 
|---|
| 173 |         Found level  260 (0x104) of size   8 (0x08)
 | 
|---|
| 174 |         Found level 1004 (0x3ec) of size  40 (0x28)
 | 
|---|
| 175 |         Found level 1010 (0x3f2) of size   2 (0x02)
 | 
|---|
| 176 |         Found level 1013 (0x3f5) of size   2 (0x02)
 | 
|---|
| 177 |         Found level 1014 (0x3f6) of size   8 (0x08)
 | 
|---|
| 178 |         Found level 1016 (0x3f8) of size   4 (0x04)
 | 
|---|
| 179 |         Found level 1019 (0x3fb) of size   8 (0x08)
 | 
|---|
| 180 |         Found level 1020 (0x3fc) of size   8 (0x08)
 | 
|---|
| 181 |         Found level 1023 (0x3ff) of size   8 (0x08)
 | 
|---|
| 182 |         Found level 1025 (0x401) of size  16 (0x10)
 | 
|---|
| 183 |         Found level 1029 (0x405) of size  72 (0x48)
 | 
|---|
| 184 |         Found level 1032 (0x408) of size  56 (0x38)
 | 
|---|
| 185 |         Found level 1039 (0x40f) of size   8 (0x08)
 | 
|---|
| 186 |         Found level 1040 (0x410) of size   8 (0x08)
 | 
|---|
| 187 | Found 19 valid levels
 | 
|---|
| 188 | 
 | 
|---|
| 189 | Checking for SETPATHINFO aliases
 | 
|---|
| 190 |         Found level 1004 (0x3ec) of size  40 (0x28)
 | 
|---|
| 191 |         Found level 1010 (0x3f2) of size   2 (0x02)
 | 
|---|
| 192 |         Found level 1013 (0x3f5) of size   2 (0x02)
 | 
|---|
| 193 |         Found level 1014 (0x3f6) of size   8 (0x08)
 | 
|---|
| 194 |         Found level 1016 (0x3f8) of size   4 (0x04)
 | 
|---|
| 195 |         Found level 1019 (0x3fb) of size   8 (0x08)
 | 
|---|
| 196 |         Found level 1020 (0x3fc) of size   8 (0x08)
 | 
|---|
| 197 |         Found level 1023 (0x3ff) of size   8 (0x08)
 | 
|---|
| 198 |         Found level 1025 (0x401) of size  16 (0x10)
 | 
|---|
| 199 |         Found level 1029 (0x405) of size  72 (0x48)
 | 
|---|
| 200 |         Found level 1032 (0x408) of size  56 (0x38)
 | 
|---|
| 201 |         Found level 1039 (0x40f) of size   8 (0x08)
 | 
|---|
| 202 |         Found level 1040 (0x410) of size   8 (0x08)
 | 
|---|
| 203 | Found 13 valid levels
 | 
|---|
| 204 | */
 | 
|---|
| 205 | #define SMB_SFILEINFO_STANDARD                             1
 | 
|---|
| 206 | #define SMB_SFILEINFO_EA_SET                               2
 | 
|---|
| 207 | #define SMB_SFILEINFO_BASIC_INFO                       0x101
 | 
|---|
| 208 | #define SMB_SFILEINFO_DISPOSITION_INFO                 0x102
 | 
|---|
| 209 | #define SMB_SFILEINFO_ALLOCATION_INFO                  0x103
 | 
|---|
| 210 | #define SMB_SFILEINFO_END_OF_FILE_INFO                 0x104
 | 
|---|
| 211 | #define SMB_SFILEINFO_UNIX_BASIC                       0x200
 | 
|---|
| 212 | #define SMB_SFILEINFO_UNIX_LINK                        0x201
 | 
|---|
| 213 | #define SMB_SPATHINFO_UNIX_HLINK                       0x203
 | 
|---|
| 214 | #define SMB_SPATHINFO_POSIX_ACL                        0x204
 | 
|---|
| 215 | #define SMB_SPATHINFO_XATTR                            0x205
 | 
|---|
| 216 | #define SMB_SFILEINFO_ATTR_FLAGS                       0x206    
 | 
|---|
| 217 | #define SMB_SFILEINFO_UNIX_INFO2                       0x20b
 | 
|---|
| 218 | #define SMB_SFILEINFO_BASIC_INFORMATION                 1004
 | 
|---|
| 219 | #define SMB_SFILEINFO_RENAME_INFORMATION                1010
 | 
|---|
| 220 | #define SMB_SFILEINFO_LINK_INFORMATION                  1011
 | 
|---|
| 221 | #define SMB_SFILEINFO_DISPOSITION_INFORMATION           1013
 | 
|---|
| 222 | #define SMB_SFILEINFO_POSITION_INFORMATION              1014
 | 
|---|
| 223 | #define SMB_SFILEINFO_FULL_EA_INFORMATION               1015
 | 
|---|
| 224 | #define SMB_SFILEINFO_MODE_INFORMATION                  1016
 | 
|---|
| 225 | #define SMB_SFILEINFO_ALLOCATION_INFORMATION            1019
 | 
|---|
| 226 | #define SMB_SFILEINFO_END_OF_FILE_INFORMATION           1020
 | 
|---|
| 227 | #define SMB_SFILEINFO_PIPE_INFORMATION                  1023
 | 
|---|
| 228 | #define SMB_SFILEINFO_VALID_DATA_INFORMATION            1039
 | 
|---|
| 229 | #define SMB_SFILEINFO_SHORT_NAME_INFORMATION            1040
 | 
|---|
| 230 | 
 | 
|---|
| 231 | /* filemon shows FilePipeRemoteInformation */
 | 
|---|
| 232 | #define SMB_SFILEINFO_1025                              1025
 | 
|---|
| 233 | 
 | 
|---|
| 234 | /* vista scan responds */
 | 
|---|
| 235 | #define SMB_SFILEINFO_1027                              1027
 | 
|---|
| 236 | 
 | 
|---|
| 237 | /* filemon shows CopyOnWriteInformation */
 | 
|---|
| 238 | #define SMB_SFILEINFO_1029                              1029
 | 
|---|
| 239 | 
 | 
|---|
| 240 | /* filemon shows OleClassIdInformation */
 | 
|---|
| 241 | #define SMB_SFILEINFO_1032                              1032
 | 
|---|
| 242 | 
 | 
|---|
| 243 | /* vista scan responds to these */
 | 
|---|
| 244 | #define SMB_SFILEINFO_1030                              1030
 | 
|---|
| 245 | #define SMB_SFILEINFO_1031                              1031
 | 
|---|
| 246 | #define SMB_SFILEINFO_1036                              1036
 | 
|---|
| 247 | #define SMB_SFILEINFO_1041                              1041
 | 
|---|
| 248 | #define SMB_SFILEINFO_1042                              1042
 | 
|---|
| 249 | #define SMB_SFILEINFO_1043                              1043
 | 
|---|
| 250 | #define SMB_SFILEINFO_1044                              1044
 | 
|---|
| 251 | 
 | 
|---|
| 252 | /* trans2 findfirst levels */
 | 
|---|
| 253 | /*
 | 
|---|
| 254 | w2k3 TRANS2ALIASES:
 | 
|---|
| 255 | Checking for FINDFIRST aliases
 | 
|---|
| 256 |         Found level    1 (0x001) of size  68 (0x44)
 | 
|---|
| 257 |         Found level    2 (0x002) of size  70 (0x46)
 | 
|---|
| 258 |         Found level  257 (0x101) of size 108 (0x6c)
 | 
|---|
| 259 |         Found level  258 (0x102) of size 116 (0x74)
 | 
|---|
| 260 |         Found level  259 (0x103) of size  60 (0x3c)
 | 
|---|
| 261 |         Found level  260 (0x104) of size 140 (0x8c)
 | 
|---|
| 262 |         Found level  261 (0x105) of size 124 (0x7c)
 | 
|---|
| 263 |         Found level  262 (0x106) of size 148 (0x94)
 | 
|---|
| 264 | Found 8 levels with success status
 | 
|---|
| 265 | Found 0 aliased levels
 | 
|---|
| 266 | */
 | 
|---|
| 267 | #define SMB_FIND_STANDARD                   1
 | 
|---|
| 268 | #define SMB_FIND_EA_SIZE                    2
 | 
|---|
| 269 | #define SMB_FIND_EA_LIST                    3
 | 
|---|
| 270 | #define SMB_FIND_DIRECTORY_INFO         0x101
 | 
|---|
| 271 | #define SMB_FIND_FULL_DIRECTORY_INFO    0x102
 | 
|---|
| 272 | #define SMB_FIND_NAME_INFO              0x103
 | 
|---|
| 273 | #define SMB_FIND_BOTH_DIRECTORY_INFO    0x104
 | 
|---|
| 274 | #define SMB_FIND_ID_FULL_DIRECTORY_INFO 0x105
 | 
|---|
| 275 | #define SMB_FIND_ID_BOTH_DIRECTORY_INFO 0x106
 | 
|---|
| 276 | #define SMB_FIND_UNIX_INFO              0x202
 | 
|---|
| 277 | #define SMB_FIND_UNIX_INFO2             0x20b
 | 
|---|
| 278 | 
 | 
|---|
| 279 | /* flags on trans2 findfirst/findnext that control search */
 | 
|---|
| 280 | #define FLAG_TRANS2_FIND_CLOSE          0x1
 | 
|---|
| 281 | #define FLAG_TRANS2_FIND_CLOSE_IF_END   0x2
 | 
|---|
| 282 | #define FLAG_TRANS2_FIND_REQUIRE_RESUME 0x4
 | 
|---|
| 283 | #define FLAG_TRANS2_FIND_CONTINUE       0x8
 | 
|---|
| 284 | #define FLAG_TRANS2_FIND_BACKUP_INTENT  0x10
 | 
|---|
| 285 | 
 | 
|---|
| 286 | /*
 | 
|---|
| 287 |  * DeviceType and Characteristics returned in a
 | 
|---|
| 288 |  * SMB_QFS_DEVICE_INFO call.
 | 
|---|
| 289 |  */
 | 
|---|
| 290 | #define QFS_DEVICETYPE_CD_ROM                   0x2
 | 
|---|
| 291 | #define QFS_DEVICETYPE_CD_ROM_FILE_SYSTEM       0x3
 | 
|---|
| 292 | #define QFS_DEVICETYPE_DISK                     0x7
 | 
|---|
| 293 | #define QFS_DEVICETYPE_DISK_FILE_SYSTEM         0x8
 | 
|---|
| 294 | #define QFS_DEVICETYPE_FILE_SYSTEM              0x9
 | 
|---|
| 295 | 
 | 
|---|
| 296 | /* Characteristics. */
 | 
|---|
| 297 | #define QFS_TYPE_REMOVABLE_MEDIA                0x1
 | 
|---|
| 298 | #define QFS_TYPE_READ_ONLY_DEVICE               0x2
 | 
|---|
| 299 | #define QFS_TYPE_FLOPPY                         0x4
 | 
|---|
| 300 | #define QFS_TYPE_WORM                           0x8
 | 
|---|
| 301 | #define QFS_TYPE_REMOTE                         0x10
 | 
|---|
| 302 | #define QFS_TYPE_MOUNTED                        0x20
 | 
|---|
| 303 | #define QFS_TYPE_VIRTUAL                        0x40
 | 
|---|
| 304 | 
 | 
|---|
| 305 | 
 | 
|---|
| 306 | /*
 | 
|---|
| 307 |  * Thursby MAC extensions....
 | 
|---|
| 308 |  */
 | 
|---|
| 309 | 
 | 
|---|
| 310 | /*
 | 
|---|
| 311 |  * MAC CIFS Extensions have the range 0x300 - 0x2FF reserved.
 | 
|---|
| 312 |  * Supposedly Microsoft have agreed to this.
 | 
|---|
| 313 |  */
 | 
|---|
| 314 | 
 | 
|---|
| 315 | #define MIN_MAC_INFO_LEVEL                      0x300
 | 
|---|
| 316 | #define MAX_MAC_INFO_LEVEL                      0x3FF
 | 
|---|
| 317 | #define SMB_QFS_MAC_FS_INFO                     0x301
 | 
|---|
| 318 | 
 | 
|---|
| 319 | 
 | 
|---|
| 320 | 
 | 
|---|
| 321 | /* UNIX CIFS Extensions - created by HP */
 | 
|---|
| 322 | /*
 | 
|---|
| 323 |  * UNIX CIFS Extensions have the range 0x200 - 0x2FF reserved.
 | 
|---|
| 324 |  * Supposedly Microsoft have agreed to this.
 | 
|---|
| 325 |  */
 | 
|---|
| 326 | 
 | 
|---|
| 327 | #define MIN_UNIX_INFO_LEVEL 0x200
 | 
|---|
| 328 | #define MAX_UNIX_INFO_LEVEL 0x2FF
 | 
|---|
| 329 | 
 | 
|---|
| 330 | #define INFO_LEVEL_IS_UNIX(level) (((level) >= MIN_UNIX_INFO_LEVEL) && ((level) <= MAX_UNIX_INFO_LEVEL))
 | 
|---|
| 331 | 
 | 
|---|
| 332 | #define SMB_MODE_NO_CHANGE                 0xFFFFFFFF     /* file mode value which */
 | 
|---|
| 333 |                                               /* means "don't change it" */
 | 
|---|
| 334 | #define SMB_UID_NO_CHANGE                  0xFFFFFFFF
 | 
|---|
| 335 | #define SMB_GID_NO_CHANGE                  0xFFFFFFFF
 | 
|---|
| 336 | 
 | 
|---|
| 337 | #define SMB_SIZE_NO_CHANGE_LO              0xFFFFFFFF
 | 
|---|
| 338 | #define SMB_SIZE_NO_CHANGE_HI              0xFFFFFFFF
 | 
|---|
| 339 |  
 | 
|---|
| 340 | #define SMB_TIME_NO_CHANGE_LO              0xFFFFFFFF
 | 
|---|
| 341 | #define SMB_TIME_NO_CHANGE_HI              0xFFFFFFFF
 | 
|---|
| 342 | 
 | 
|---|
| 343 | /*
 | 
|---|
| 344 | UNIX_BASIC  info level:
 | 
|---|
| 345 | 
 | 
|---|
| 346 | Offset Size         Name
 | 
|---|
| 347 | 0      LARGE_INTEGER EndOfFile                File size
 | 
|---|
| 348 | 8      LARGE_INTEGER Blocks                   Number of bytes used on disk (st_blocks).
 | 
|---|
| 349 | 16     LARGE_INTEGER CreationTime             Creation time
 | 
|---|
| 350 | 24     LARGE_INTEGER LastAccessTime           Last access time
 | 
|---|
| 351 | 32     LARGE_INTEGER LastModificationTime     Last modification time
 | 
|---|
| 352 | 40     LARGE_INTEGER Uid                      Numeric user id for the owner
 | 
|---|
| 353 | 48     LARGE_INTEGER Gid                      Numeric group id of owner
 | 
|---|
| 354 | 56     ULONG Type                             Enumeration specifying the pathname type:
 | 
|---|
| 355 |                                               0 -- File
 | 
|---|
| 356 |                                               1 -- Directory
 | 
|---|
| 357 |                                               2 -- Symbolic link
 | 
|---|
| 358 |                                               3 -- Character device
 | 
|---|
| 359 |                                               4 -- Block device
 | 
|---|
| 360 |                                               5 -- FIFO (named pipe)
 | 
|---|
| 361 |                                               6 -- Unix domain socket
 | 
|---|
| 362 | 
 | 
|---|
| 363 | 60     LARGE_INTEGER devmajor                 Major device number if type is device
 | 
|---|
| 364 | 68     LARGE_INTEGER devminor                 Minor device number if type is device
 | 
|---|
| 365 | 76     LARGE_INTEGER uniqueid                 This is a server-assigned unique id for the file. The client
 | 
|---|
| 366 |                                               will typically map this onto an inode number. The scope of
 | 
|---|
| 367 |                                               uniqueness is the share.
 | 
|---|
| 368 | 84     LARGE_INTEGER permissions              Standard UNIX file permissions  - see below.
 | 
|---|
| 369 | 92     LARGE_INTEGER nlinks                   The number of directory entries that map to this entry
 | 
|---|
| 370 |                                               (number of hard links)
 | 
|---|
| 371 | 
 | 
|---|
| 372 | 100 - end.
 | 
|---|
| 373 | */
 | 
|---|
| 374 | 
 | 
|---|
| 375 | /*
 | 
|---|
| 376 | SMB_QUERY_FILE_UNIX_INFO2 is SMB_QUERY_FILE_UNIX_BASIC with create
 | 
|---|
| 377 | time and file flags appended. The corresponding info level for
 | 
|---|
| 378 | findfirst/findnext is SMB_FIND_FILE_UNIX_UNIX2.
 | 
|---|
| 379 | 
 | 
|---|
| 380 | Size    Offset  Value
 | 
|---|
| 381 | ---------------------
 | 
|---|
| 382 | 0      LARGE_INTEGER EndOfFile          File size
 | 
|---|
| 383 | 8      LARGE_INTEGER Blocks             Number of blocks used on disk
 | 
|---|
| 384 | 16     LARGE_INTEGER ChangeTime         Attribute change time
 | 
|---|
| 385 | 24     LARGE_INTEGER LastAccessTime           Last access time
 | 
|---|
| 386 | 32     LARGE_INTEGER LastModificationTime     Last modification time
 | 
|---|
| 387 | 40     LARGE_INTEGER Uid                Numeric user id for the owner
 | 
|---|
| 388 | 48     LARGE_INTEGER Gid                Numeric group id of owner
 | 
|---|
| 389 | 56     ULONG Type                       Enumeration specifying the file type
 | 
|---|
| 390 | 60     LARGE_INTEGER devmajor           Major device number if type is device
 | 
|---|
| 391 | 68     LARGE_INTEGER devminor           Minor device number if type is device
 | 
|---|
| 392 | 76     LARGE_INTEGER uniqueid           This is a server-assigned unique id
 | 
|---|
| 393 | 84     LARGE_INTEGER permissions        Standard UNIX permissions
 | 
|---|
| 394 | 92     LARGE_INTEGER nlinks             Number of hard link)
 | 
|---|
| 395 | 100    LARGE_INTEGER CreationTime       Create/birth time
 | 
|---|
| 396 | 108    ULONG FileFlags                  File flags enumeration
 | 
|---|
| 397 | 112    ULONG FileFlagsMask              Mask of valid flags
 | 
|---|
| 398 | */
 | 
|---|
| 399 | 
 | 
|---|
| 400 | /* UNIX filetype mappings. */
 | 
|---|
| 401 | 
 | 
|---|
| 402 | #define UNIX_TYPE_FILE      0
 | 
|---|
| 403 | #define UNIX_TYPE_DIR       1
 | 
|---|
| 404 | #define UNIX_TYPE_SYMLINK   2
 | 
|---|
| 405 | #define UNIX_TYPE_CHARDEV   3
 | 
|---|
| 406 | #define UNIX_TYPE_BLKDEV    4
 | 
|---|
| 407 | #define UNIX_TYPE_FIFO      5
 | 
|---|
| 408 | #define UNIX_TYPE_SOCKET    6
 | 
|---|
| 409 | #define UNIX_TYPE_UNKNOWN   0xFFFFFFFF
 | 
|---|
| 410 | 
 | 
|---|
| 411 | /*
 | 
|---|
| 412 |  * Oh this is fun. "Standard UNIX permissions" has no
 | 
|---|
| 413 |  * meaning in POSIX. We need to define the mapping onto
 | 
|---|
| 414 |  * and off the wire as this was not done in the original HP
 | 
|---|
| 415 |  * spec. JRA.
 | 
|---|
| 416 |  */
 | 
|---|
| 417 | 
 | 
|---|
| 418 | #define UNIX_X_OTH                      0000001
 | 
|---|
| 419 | #define UNIX_W_OTH                      0000002
 | 
|---|
| 420 | #define UNIX_R_OTH                      0000004
 | 
|---|
| 421 | #define UNIX_X_GRP                      0000010
 | 
|---|
| 422 | #define UNIX_W_GRP                      0000020
 | 
|---|
| 423 | #define UNIX_R_GRP                      0000040
 | 
|---|
| 424 | #define UNIX_X_USR                      0000100
 | 
|---|
| 425 | #define UNIX_W_USR                      0000200
 | 
|---|
| 426 | #define UNIX_R_USR                      0000400
 | 
|---|
| 427 | #define UNIX_STICKY                     0001000
 | 
|---|
| 428 | #define UNIX_SET_GID                    0002000
 | 
|---|
| 429 | #define UNIX_SET_UID                    0004000
 | 
|---|
| 430 | 
 | 
|---|
| 431 | /* Masks for the above */
 | 
|---|
| 432 | #define UNIX_OTH_MASK                   0000007
 | 
|---|
| 433 | #define UNIX_GRP_MASK                   0000070
 | 
|---|
| 434 | #define UNIX_USR_MASK                   0000700
 | 
|---|
| 435 | #define UNIX_PERM_MASK                  0000777
 | 
|---|
| 436 | #define UNIX_EXTRA_MASK                 0007000
 | 
|---|
| 437 | #define UNIX_ALL_MASK                   0007777
 | 
|---|
| 438 | 
 | 
|---|
| 439 | /* Flags for the file_flags field in UNIX_INFO2: */
 | 
|---|
| 440 | #define EXT_SECURE_DELETE               0x00000001
 | 
|---|
| 441 | #define EXT_ENABLE_UNDELETE             0x00000002
 | 
|---|
| 442 | #define EXT_SYNCHRONOUS                 0x00000004
 | 
|---|
| 443 | #define EXT_IMMUTABLE                   0x00000008
 | 
|---|
| 444 | #define EXT_OPEN_APPEND_ONLY            0x00000010
 | 
|---|
| 445 | #define EXT_DO_NOT_BACKUP               0x00000020
 | 
|---|
| 446 | #define EXT_NO_UPDATE_ATIME             0x00000040
 | 
|---|
| 447 | #define EXT_HIDDEN                      0x00000080
 | 
|---|
| 448 | 
 | 
|---|
| 449 | #define SMB_QFILEINFO_UNIX_LINK         0x201
 | 
|---|
| 450 | #define SMB_SFILEINFO_UNIX_LINK         0x201
 | 
|---|
| 451 | #define SMB_SFILEINFO_UNIX_HLINK        0x203
 | 
|---|
| 452 | 
 | 
|---|
| 453 | /*
 | 
|---|
| 454 |  Info level for QVOLINFO - returns version of CIFS UNIX extensions, plus
 | 
|---|
| 455 |  64-bits worth of capability fun :-).
 | 
|---|
| 456 | */
 | 
|---|
| 457 | 
 | 
|---|
| 458 | #define SMB_QUERY_CIFS_UNIX_INFO      0x200
 | 
|---|
| 459 | 
 | 
|---|
| 460 | /* Returns the following.
 | 
|---|
| 461 | 
 | 
|---|
| 462 |   UINT16             major version number
 | 
|---|
| 463 |   UINT16             minor version number
 | 
|---|
| 464 |   LARGE_INTEGER      capability bitfield
 | 
|---|
| 465 | 
 | 
|---|
| 466 | */
 | 
|---|
| 467 | 
 | 
|---|
| 468 | #define CIFS_UNIX_MAJOR_VERSION 1
 | 
|---|
| 469 | #define CIFS_UNIX_MINOR_VERSION 0
 | 
|---|
| 470 | 
 | 
|---|
| 471 | #define CIFS_UNIX_FCNTL_LOCKS_CAP           0x1
 | 
|---|
| 472 | #define CIFS_UNIX_POSIX_ACLS_CAP            0x2
 | 
|---|
| 473 | 
 | 
|---|
| 474 | /* ... more as we think of them :-). */
 | 
|---|
| 475 | 
 | 
|---|
| 476 | #endif
 | 
|---|