3.2.4.1 Determining the Version of the Registry Protocol
If the Management Client role implementation has an existing MSDTC Connection Manager: OleTx Transports Protocol [MS-CMPO] session with the Management Server role implementation, the Management Client role implementation MUST check the State field of the session object, as specified in [MS-CMPO], section 3.3.4.2.1.
If the Management Client role implementation has no existing MSDTC Connection Manager: OleTx Transports Protocol [MS-CMPO] session with the Management Server role implementation, the Management Client role implementation MUST use the protocol versioning negotiation mechanism, as specified in [MS-CMPO] sections 3.3.4.2.1 and 3.3.4.2.2 to determine the version of the registry protocol supported by the Management Server role implementation as follows:
Initialize the underlying MSDTC Connection Manager: OleTx Transports Protocol transport, specifying the following:
Set the Minimum Level 3 Version Number data field of the underlying MSDTC Connection Manager: OleTx Transports Protocol implementation to 0x00000001 (the lowest protocol version specified in [MS-DTCO] section 2.2.1.1).
Set the Maximum Level 3 Version Number data field of the underlying MSDTC Connection Manager: OleTx Transports Protocol implementation to 0x00000006 (the highest protocol version specified in [MS-DTCO] section 2.2.1.1).
Establish a new MSDTC Connection Manager: OleTx Transports Protocol session with the Management Server role implementation and record the value of the dwLevelThreeAccepted field of the session object's Version field, as specified in [MS-CMPO] section 3.2.1.2.
Tear down the MSDTC Connection Manager: OleTx Transports Protocol session, as specified in [MS-CMPO] sections 3.3.4.5 and 3.3.4.6.
If the value of the dwLevelThreeAccepted field is 0x00000001, 0x00000002 or 0x00000004, then the version of the registry protocol maps to version 1, 2 or 3, respectively, as specified in the following table. If the value of the dwLevelThreeAccepted field is 0x00000005 or 0x00000006, then more steps are required to determine the version of the registry protocol.
|
dwLevelThreeAccepted |
HKCR\CID.Local exists? |
HKCR\CID.Local\ <MSDTCUIS_GUID> exists? |
ApiOpenCluster() |
Version |
|---|---|---|---|---|
|
0x00000001 |
Not applicable |
Not applicable |
Not applicable |
1 |
|
0x00000002 |
Not applicable |
Not applicable |
Not applicable |
2 |
|
0x00000004 |
Not applicable |
Not applicable |
Not applicable |
3 |
|
0x00000005 |
No |
Not applicable |
A null value, as specified in [MS-CMRP] section 3.1.4.2.2. |
4 |
|
0x00000005 |
No |
Not applicable |
A valid HCLUSTER_RPC value, as specified in [MS-CMRP] section 2.2.1.1. |
5 |
|
0x00000005 |
Yes |
Yes |
Not applicable |
6 |
|
0x00000005 |
Yes |
No |
Not applicable |
7 |
|
0x00000006 |
Yes |
Yes |
Not applicable |
8 |
|
0x00000006 |
Yes |
No |
Not applicable |
9 |
Establish a Windows Remote Registry Protocol [MS-RRP] connection with the Management Server role implementation, and attempt to open the "HKEY_CLASSES_ROOT\CID.Local" registry key.
If the registry key exists, then:
Attempt to open the "HKEY_CLASSES_ROOT\CID.Local\<MSDTCUIS_GUID>" registry key, using the <MSDTCUIS_GUID> obtained during initialization, as specified in section 3.2.3.
If the registry key exists, then:
If the value of the dwLevelThreeAccepted field is 0x00000005, then the version of the registry protocol is 6.
Otherwise, the version of the registry protocol is 8.
Otherwise:
If the value of the dwLevelThreeAccepted field is 0x00000005, then the version of the registry protocol is 7.
Otherwise, the version of the registry protocol is 9.
Otherwise,
Attempt to establish a Failover Cluster: Management API (ClusAPI) Protocol RPC interface connection (as specified in [MS-CMRP] section 3.2.3) with the Management Server role implementation.
If the Failover Cluster: Management API (ClusAPI) Protocol [MS-CMRP] RPC interface connection can be established, then the version of the registry protocol is 5.
Otherwise, the version of the registry protocol is 4.