[Tom in Bcc]
Hi Ralph:
I'll help you with this request and will be in touch as soon as I have an 
answer.

Regards,
Obaid Farooqi
Sr. Escalation Engineer | Microsoft

-----Original Message-----
From: Tom Jebo <tomj...@microsoft.com> 
Sent: Monday, June 16, 2025 10:43 AM
To: Ralph Boehme <s...@samba.org>
Cc: cifs-protocol@lists.samba.org
Subject: RE: [EXTERNAL] MS-SMB2: Create replay and Persistent Handle - 
TrackingID#2506160040006768

[dochelp to bcc]
[support mail to cc]

Hi Ralph, 

Thanks for your request regarding MS-SMB2. One of the Open Specifications team 
members will respond to assist you. In the meantime, we’ve created case 
2506160040006768 to track this request. Please leave the case number in the 
subject when communicating with our team about this request.

Best regards,
Tom Jebo
Microsoft Open Specifications Support

-----Original Message-----
From: Ralph Boehme <s...@samba.org> 
Sent: Monday, June 16, 2025 8:25 AM
To: Interoperability Documentation Help <doch...@microsoft.com>
Cc: cifs-protocol@lists.samba.org
Subject: [EXTERNAL] MS-SMB2: Create replay and Persistent Handle

Hi dochelp,

I'm currently trying to understand the following behaviour related to 
create-replay observed against a Windows Server:

1. establish SMB3 connection
2. open a Persistent Handle
3. disconnect
4. reconnect
5. replay the create
6. write
7. replay the create again

The last step fails with STATUS_FILE_NOT_AVAILABLE which I can't align with the 
docs.

3.3.5.13 Receiving an SMB2 WRITE Request has

---8<---
If Open.IsPersistent is FALSE and Open.IsReplayEligible is TRUE, the server 
MUST set Open.IsReplayEligible to FALSE.
---8<---

so, as Open.IsPersistent is TRUE, Open.IsReplayEligible should be kept as TRUE.

Then CREATE processing 3.3.5.9 Receiving an SMB2 CREATE Request should
apply:

---8<---
If the server implements the SMB 3.x dialect family and all of the following 
conditions are TRUE, the server MUST look up an Open in GlobalOpenTable where 
Open.IsReplayEligible is TRUE and Open.CreateGuid matches the CreateGuid in the
SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2

...

If an Open is found, the server MUST perform the following:

...

- Construct the create response from Open, as specified in the
   "Response Construction" phase; the remaining create processing
   MUST be skipped.
---8<---

See attached network trace "ph-replay.pcap".

If I do the same but change the second replay from step 7 to a "normal" 
CREATE, that returns successful and just opens a second handle on the file 
(trace "ph-replay-once.pcap").

If I do the same with just a Durable Handles in step 2 instead of a PH and a 
replay in step 7, the replay in step 7 is "ignored" and treated as a new open 
so I get a second handle (trace "ph-durable.pcap").

*scratches head*

Can you explain this? Am I missing something in the docs? Maybe some 
interaction with ChannelSequence?

Thanks!
-slow
_______________________________________________
cifs-protocol mailing list
cifs-protocol@lists.samba.org
https://lists.samba.org/mailman/listinfo/cifs-protocol

Reply via email to