[cifs-protocol] Response to SVHDX_OPEN_DEVICE_CONTEXT[_V2] when shared VHDX is not supported
bburgin at microsoft.com
Wed Feb 24 21:30:36 UTC 2016
We created SR 116022413751567 to track this issue.
Yes, there seems to be a disconnect in [MS-SMB2] 22.214.171.124.14 "Handling the SVHDX_OPEN_DEVICE_CONTEXT Create Context" where we say that you should return STATUS_INVALID_DEVICE_REQUEST if you recognize that the device context is SVHDX_OPEN_DEVICE_CONTEXT ("0x9CCBCF9E04C1E643980E158DA1F6EC83") but don't support RSVD on one hand but you should ignore the context if you don't recognize what the context is on the other.
I'll research this for you.
Logically, we know that the Windows backup feature will add this context to a Create and that backup will fail unless the create succeeds. Thus, if you properly recognize the context name but don't support RSVD you shouldn't be at a disadvantage compared to not knowing what the context is at all. I'll help clarify the disconnect in the specification.
From: Uri Simchoni [mailto:uri at samba.org]
Sent: Wednesday, February 24, 2016 12:41 PM
To: Bryan Burgin <bburgin at microsoft.com>; Interoperability Documentation Help <dochelp at microsoft.com>
Cc: cifs-protocol at lists.samba.org
Subject: Response to SVHDX_OPEN_DEVICE_CONTEXT[_V2] when shared VHDX is not supported
This is a clarification request following recently-closed REG:116022313745563.
I would appreciate a clarification with regards to Shared VHDX and [MS-SMB2].
In the correspondence of that case, it was indicated that upon receiving a SVHDX_OPEN_DEVICE_CONTEXT or SVHDX_OPEN_DEVICE_CONTEXT_V2 create context, an SMB3.0.2 or SMB3.1.1 server which does not support SVHDX on that share should ignore the context (If I understand correctly - that's the way to signal to the client that SVHDX is not supported).
However, my reading of [MS-SMB2], including the errata, suggests otherwise:
1. The errata says "The server MUST fail create contexts having a NameLength less than 4 with a STATUS_INVALID_PARAMETER error." - OK, the server doesn't fail the context and moves on with processing the Open.
2. 126.96.36.199.14 says "If IsSharedVHDSupported is FALSE, the server MUST fail the request with STATUS_INVALID_DEVICE_REQUEST"
Whereas IsSharedVHDSupported is a global state variable signaling support for share VHDX - that is, it's FALSE in our case.
It is true that 188.8.131.52.14 is about SVHDX_OPEN_DEVICE_CONTEXT and in the aforementioned case the context was SVHDX_OPEN_DEVICE_CONTEXT_V2, but read this section as relating to SVHDX_OPEN_DEVICE_CONTEXT_V2 as well, because there's no other reference to SVHDX_OPEN_DEVICE_CONTEXT_V2 handling (and since it's a tunneling operation, the SMB server doesn't care much if it's _V2 or not).
More information about the cifs-protocol