{
NTSTATUS status;
struct smb2_request *req;
+ uint64_t max_payload_in;
+ uint64_t max_payload_out;
+ size_t max_payload;
req = smb2_request_init_tree(tree, SMB2_OP_IOCTL, 0x38, true,
io->in.in.length+io->in.out.length);
SIVAL(req->out.body, 0x2C, io->in.max_output_response);
SBVAL(req->out.body, 0x30, io->in.flags);
+ max_payload_in = io->in.out.length + io->in.in.length;
+ max_payload_in = MIN(max_payload_in, UINT32_MAX);
+ max_payload_out = io->in.max_input_response + io->in.max_output_response;
+ max_payload_out = MIN(max_payload_out, UINT32_MAX);
+
+ max_payload = MAX(max_payload_in, max_payload_out);
+ req->credit_charge = (MAX(max_payload, 1) - 1)/ 65536 + 1;
+
smb2_transport_send(req);
return req;