3 pointer_default(unique)
7 typedef [public] struct {
10 /* <56> Windows sends 4 bytes of zero for the context field. */
14 const uint32 COPYCHUNK_MAX_CHUNKS
= 256; /* 2k8r2 & win8 = 256 */
15 const uint32 COPYCHUNK_MAX_CHUNK_LEN
= 1048576; /* 2k8r2 & win8 = 1048576 */
16 const uint32 COPYCHUNK_MAX_TOTAL_LEN
= 16777216; /* 2k8r2 & win8 = 16777216 */
25 typedef [public] struct {
29 srv_copychunk chunks
[chunk_count
];
32 typedef [public] struct {
33 uint32 chunks_written
;
34 uint32 chunk_bytes_written
;
35 uint32 total_bytes_written
;
38 typedef [public] struct {
41 uint32 maximum_token_lifetime
;
42 uint32 default_token_lifetime
;
43 hyper maximum_xfer_size
;
44 hyper optimal_xfer_count
;
45 uint32 maximum_data_descriptors
;
46 uint32 maximum_xfer_length_per_descriptor
;
47 uint32 optimal_xfer_length_per_descriptor
;
48 uint16 optimal_xfer_length_granularity
;
50 } device_copy_offload_descriptor
;
52 const uint32 STORAGE_OFFLOAD_TOKEN_TYPE_ZERO_DATA
= 0xffff0001;
54 typedef [public] struct {
58 [size_is(token_id_len
)] uint8 token
[];
59 } storage_offload_token
;
61 typedef [public] struct {
64 uint32 token_time_to_live
;
68 } fsctl_offload_read_input
;
70 typedef [public,bitmap32bit
] bitmap
{
71 OFFLOAD_READ_FLAG_FILE_TOO_SMALL
= 0x01,
72 OFFLOAD_READ_FLAG_ALL_ZERO_BEYOND_RANGE
= 0x02,
73 OFFLOAD_READ_FLAG_CANNOT_OFFLOAD_BEYOND_RANGE
= 0x04
76 typedef [public] struct {
80 storage_offload_token token
;
81 } fsctl_offload_read_output
;
83 typedef [public] struct {
89 storage_offload_token token
;
90 } fsctl_offload_write_input
;
92 typedef [public] struct {
96 } fsctl_offload_write_output
;
98 typedef [public] struct {
103 } fsctl_dup_extents_to_file
;
106 interface compression
108 const uint16 COMPRESSION_FORMAT_NONE
= 0x0000;
109 const uint16 COMPRESSION_FORMAT_DEFAULT
= 0x0001;
110 const uint16 COMPRESSION_FORMAT_LZNT1
= 0x0002;
112 typedef [public] struct {
117 interface netinterface
119 typedef [bitmap32bit
] bitmap
{
120 FSCTL_NET_IFACE_NONE_CAPABLE
= 0x00000000,
121 FSCTL_NET_IFACE_RSS_CAPABLE
= 0x00000001,
122 FSCTL_NET_IFACE_RDMA_CAPABLE
= 0x00000002
123 } fsctl_net_iface_capability
;
125 typedef [enum16bit
] enum {
126 FSCTL_NET_IFACE_AF_INET
= 0x0002,
127 FSCTL_NET_IFACE_AF_INET6
= 0x0017
130 typedef [flag
(NDR_NOALIGN
)] struct {
131 [value
(0)] uint16 port
;
132 [flag
(NDR_BIG_ENDIAN
)] ipv4address ipv4
;
133 [value
(0)] hyper reserved
;
136 typedef [flag
(NDR_NOALIGN
)] struct {
137 [value
(0)] uint16 port
;
138 [value
(0)] uint32 flowinfo
;
139 [flag
(NDR_BIG_ENDIAN
)] ipv6address ipv6
;
140 [value
(0)] uint32 scopeid
;
141 } fsctl_sockaddr_in6
;
143 typedef [nodiscriminant
,flag
(NDR_NOALIGN
)] union {
144 [case (FSCTL_NET_IFACE_AF_INET
)] fsctl_sockaddr_in saddr_in
;
145 [case (FSCTL_NET_IFACE_AF_INET6
)] fsctl_sockaddr_in6 saddr_in6
;
146 } fsctl_sockaddr_union
;
148 typedef [flag
(NDR_NOALIGN
)] struct {
149 fsctl_sockaddr_af family
;
150 [subcontext
(0),subcontext_size
(126),switch_is(family
)] fsctl_sockaddr_union saddr
;
151 } fsctl_sockaddr_storage
;
153 typedef [public,relative_base
,noprint
] struct {
154 [relative
,max_recursion
(20000)] fsctl_net_iface_info
*next
;
156 fsctl_net_iface_capability capability
;
157 [value
(0)] uint32 reserved
;
159 fsctl_sockaddr_storage sockaddr
;
160 } fsctl_net_iface_info
;
165 /* MS-FSCC 2.3.33 FSCTL_QUERY_ALLOCATED_RANGES Request */
166 typedef [public] struct {
169 } file_alloced_range_buf
;
171 typedef [public] struct {
172 file_alloced_range_buf buf
;
173 } fsctl_query_alloced_ranges_req
;
176 * 2.3.34 FSCTL_QUERY_ALLOCATED_RANGES Reply
178 * The number of FILE_ALLOCATED_RANGE_BUFFER elements returned is
179 * computed by dividing the size of the returned output buffer (from
180 * either SMB or SMB2, the lower-layer protocol that carries the FSCTL)
181 * by the size of the FILE_ALLOCATED_RANGE_BUFFER element.
183 * This logic can't (currently) be represented in pidl, so just use a
184 * blob. Perhaps in future we'll support:
185 * [flag(NDR_REMAINING)] file_alloced_range_buf array[];
187 typedef [public] struct {
188 [flag
(NDR_REMAINING
)] DATA_BLOB far_buf_array
;
189 } fsctl_query_alloced_ranges_rsp
;
191 /* 2.3.65 FSCTL_SET_ZERO_DATA Request */
192 typedef [public] struct {
194 hyper beyond_final_zero
;
195 } file_zero_data_info
;
197 typedef [public] struct {
198 file_zero_data_info info
;
199 } fsctl_set_zero_data_req
;
204 /* 2.2.31.3 NETWORK_RESILIENCY_REQUEST */
205 typedef [public] struct {
208 } network_resiliency_request
;
213 /* MS-FSCC 2.3.73.1 FILE_LEVEL_TRIM_RANGE */
214 typedef [public] struct {
217 } file_level_trim_range
;
219 /* MS-FSCC 2.3.73 FSCTL_FILE_LEVEL_TRIM Request */
220 typedef [public] struct {
223 file_level_trim_range ranges
[num_ranges
];
224 } fsctl_file_level_trim_req
;
226 /* MS-FSCC 2.3.74 FSCTL_FILE_LEVEL_TRIM Reply */
227 typedef [public] struct {
228 uint32 num_ranges_processed
;
229 } fsctl_file_level_trim_rsp
;