7 Appendix B: Product Behavior

The information in this specification is applicable to the following Microsoft products or supplemental software. References to product versions include updates to those products.

  • Windows NT operating system

  • Windows 2000 operating system

  • Windows XP operating system

  • Windows Server 2003 operating system

  • Windows Vista operating system

  • Windows Server 2008 operating system

Exceptions, if any, are noted in this section. If an update version, service pack or Knowledge Base (KB) number appears with a product name, the behavior changed in that update. The new behavior also applies to subsequent updates unless otherwise specified. If a product edition appears with the product version, behavior is different in that product edition.

Unless otherwise specified, any statement of optional behavior in this specification that is prescribed using the terms "SHOULD" or "SHOULD NOT" implies product behavior in accordance with the SHOULD or SHOULD NOT prescription. Unless otherwise specified, the term "MAY" implies that the product does not follow the prescription.

<1> Section 1.4: Windows NT Server operating system contains a directory service that implements the server side of the Message Queuing (MSMQ): Directory Service Protocol. Windows 2000, Windows Server 2003, and Windows Server 2008 store directory objects in Active Directory and implement the server side of this protocol as a pass-through to Active Directory. This protocol is deprecated but still supported in Windows Server 2003 and Windows Server 2008 for backward compatibility.

Windows NT Server, Windows 2000, Windows XP, and Windows Server 2003 implement the client side of this protocol. Windows XP and Windows Server 2003 use LDAP [MS-ADTS] to access Active Directory in conjunction with the algorithm specified in [MS-MQDSSM] when it is available; otherwise, they use this protocol. Windows Vista and Windows Server 2008 always use LDAP [MS-ADTS] and [MS-MQDSSM].

<2> Section 1.6: Windows NT Server contains a directory service that implements the server side of the Message Queuing (MSMQ): Directory Service Protocol. Windows 2000, Windows Server 2003, and Windows Server 2008 store directory objects in Active Directory and implement the server side of this protocol as a pass-through to Active Directory. This protocol is deprecated but still supported in Windows Server 2003 and Windows Server 2008 for backward compatibility.

Windows NT Server, Windows 2000, Windows XP, and Windows Server 2003 implement the client side of this protocol. Windows XP and Windows Server 2003 use LDAP [MS-ADTS] to access Active Directory in conjunction with the algorithm specified in [MS-MQDSSM] when it is available; otherwise, they use this protocol. Windows Vista and Windows Server 2008 always use [MS-ADTS] and [MS-MQDSSM].

<3> Section 1.7: Windows NT Server,Windows 2000 Server operating system , and Windows Server 2003 implement the client and server side of the dscomm interface specified in section 3.1. Windows 2000 Server and Windows Server 2003 implement the client and server side of the dscomm2 interface specified in section 3.3.

Windows NT Server, Windows 2000, Windows XP, and Windows Server 2003 implement the client side of the dscomm interface specified in section 3.1. Windows 2000 Server, Windows XP, and Windows Server 2003 implement the client side of the dscomm2 interface specified in section 3.3.

<4> Section 2.1: Windows can be configured via the registry to use a static port. The server uses registry key HKLM\SOFTWARE\Microsoft\MSMQ\Parameters\UseDSPredefinedEP to determine whether to use the predefined endpoint instead of a dynamic endpoint. Setting this key to a nonzero DWORD value causes the predefined endpoint to be used. The endpoint port number defaults to 2879 but can be configured by setting registry key HKLM\SOFTWARE\Microsoft\MSMQ\Parameters\MsmqDSRpcIpPort to a string value equal to the preferred endpoint port number.

<5> Section 2.1: Only Windows NT 4.0 operating system and Windows 2000 support RPC over SPX.

<6> Section 2.1: Except for Windows NT, Windows supports both NTLM, as described in [NTLM], and Kerberos. Windows NT supports only NTLM.

<7> Section 2.2: Windows NT and Windows 2000 do not specify any NDR consistency check. Windows XP and Windows Server 2003 specify NDR consistency checks at target level 5.0. Windows Vista and Windows Server 2008 specify NDR consistency checks at target level 6.0

<8> Section 2.2.19: Other key BLOB types might be supported but are untested. Windows uses the PUBLICKEYBLOB BLOB type.

<9> Section 2.2.19: Other key algorithms might be supported but are untested. Windows uses only CALG_RSA_KEYX or CALG_RSA_SIGN algorithms.

<10> Section 3.1.1.1: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the structure of this eight-byte array was defined in the archived [MC-MQDSRP] protocol, section 2.2.2.

<11> Section 3.1.1.2: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the GUID was the PartitionID attribute of the DirectoryPartition data element defined in the archived [MC-MQDSRP] protocol, section 3.1.1.2.3. On these platforms, when a directory server receives a request to create, update or delete a directory object, it uses the PartitionIdentifier attribute of the object to determine whether to forward the request to another server.

<12> Section 3.1.1.14: Windows NT maintains these ADM elements. Windows 2000, Windows Server 2003 and Windows Server 2008 store these ADM elements in the Active Directory, and the server side of this protocol accesses the directory objects in Active Directory through the [MS-MQDSSM] algorithm.

<13> Section 3.1.3: Windows supports both dynamic and static endpoints. The server uses registry key HKLM\SOFTWARE\Microsoft\MSMQ\Parameters\UseDSPredefinedEP to determine whether to use the predefined endpoint instead of a dynamic endpoint. Setting this key to a nonzero DWORD value causes the predefined endpoint to be used. The endpoint port number defaults to 2879 but can be configured by setting registry key HKLM\SOFTWARE\Microsoft\MSMQ\Parameters\MsmqDSRpcIpPort to a string value equal to the preferred endpoint port number.

<14> Section 3.1.4: Windows NT and Windows 2000 do not specify any NDR consistency checks. Windows XP and Windows Server 2003 specify NDR consistency checks at target level 5.0. Windows Vista and Windows Server 2008 specify NDR consistency checks at target level 6.0

<15> Section 3.1.4: Gaps in the opnum numbering sequence apply to Windows as follows.

 Opnum

 Description

9

For Windows NT 4.0, this method is not used. For Windows but not for Windows NT 4.0, this method returns MQ_ERROR_FUNCTION_NOT_SUPPORTED. It is never used.

15

For Windows NT 4.0, this method is not used. For Windows but not for Windows NT 4.0, this method returns MQ_ERROR_FUNCTION_NOT_SUPPORTED. It is never used.

16

For Windows NT 4.0, this method is not used. For Windows but not for Windows NT 4.0, this method returns MQ_ERROR_FUNCTION_NOT_SUPPORTED. It is never used.

17

For Windows NT 4.0, this method is not used. For Windows but not for Windows NT 4.0, this method returns MQ_ERROR_FUNCTION_NOT_SUPPORTED. It is never used.

18

Not used by Windows.

24

For Windows NT 4.0, this method is not used. For Windows but not for Windows NT 4.0, this method returns MQ_ERROR_FUNCTION_NOT_SUPPORTED. It is never used.

25

For Windows NT 4.0, this method is not used. For Windows but not for Windows NT 4.0, this method returns MQ_ERROR_FUNCTION_NOT_SUPPORTED. It is never used.

26

For Windows NT 4.0, this method is not used. For Windows but not for Windows NT 4.0, this method returns MQ_ERROR_FUNCTION_NOT_SUPPORTED. It is never used.

<16> Section 3.1.4.1: Only Windows NT and Windows 2000 support IPX bindings.

<17> Section 3.1.4.2: If the fSetupMode parameter is nonzero, Windows NT verifies that the pguidEnterpriseId parameter matches the GUID of the enterprise owning the site to which the server belongs. Windows 2000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008 ignore this parameter.

<18> Section 3.1.4.2: Windows NT uses this parameter to determine whether to validate the pguidEnterpriseId parameter. Windows 2000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008 ignore this parameter.

<19> Section 3.1.4.4: For Windows NT, the server sets pObjGuid to the GUID of the created object only if dwObjectType is equal to MQDS_QUEUE.

<20> Section 3.1.4.4: If the cp parameter is 0x00000000, Windows NT returns MQ_OK. If the cp parameter is 0x00000000, Windows 2000 returns MQ_ERROR_INVALID_PARAMETER (0xC00E0006). If the cp parameter is 0x00000000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008 return an error from the RPC runtime.

<21> Section 3.1.4.4: Windows NT has different property identifier requirements, as specified in [MS-MQMQ], and as shown in the following table:

Object Type

Required property identifiers

MQDS_QUEUE

PROPID_Q_PATHNAME (section 2.3.1.3)

MQDS_MACHINE

PROPID_QM_SITE_ID (section 2.3.2.1)

PROPID_QM_MACHINE_ID (section 2.3.2.2)

PROPID_QM_PATHNAME (section 2.3.2.3)

PROPID_QM_CNS (section 2.3.2.6)

PROPID_QM_ADDRESS (section 2.3.2.5)

MQDS_SITE

PROPID_S_SITEID (section 2.3.3.2)

PROPID_S_PSC (section 2.3.3.4)

MQDS_CN

PROPID_CN_GUID (section 2.3.4.3)

MQDS_ENTERPRISE

Object cannot be created

MQDS_USER

PROPID_U_SIGN_CERT (section 2.3.6.4)

PROPID_U_DIGEST (section 2.3.6.5)

MQDS_ROUTINGLINK

PROPID_L_NEIGHBOR1 (section 2.3.7.1)

PROPID_L_NEIGHBOR2 (section 2.3.7.2)

PROPID_L_COST (section 2.3.7.3)

PROPID_L_ID (section 2.3.7.6)

<22> Section 3.1.4.4: For Windows NT, and Windows 2000 when operating in MSMQ mixed-mode, the server performs the following steps:

  • Let ServerQueueManager be the QueueManager ADM element instance located in the QueueManagerCollection ADM element that corresponds to the queue manager with which the server is co-located.

  • Let DoForward be a boolean that is set to FALSE. Let SiteGuid be a GUID that is set to GUID_NULL.

  • If dwObjectType is one of MQDS_SITE, MQDS_CN, MQDS_USER, or MQDS_ROUTINGLINK and ServerQueueManager.DirectoryServerType is not PrimaryEnterpriseController, DoForward is set to TRUE.

  • If dwObjectType is MQDS_QUEUE

    • Let ComputerName be the computer name portion of the path name supplied in pwcsPathName, as specified in [MS-MQMQ] section 2.1.1.

    • If ComputerName is different from ServerQueueManager.ComputerName:

      • Generate a Get Directory Object (section 3.1.6.12) event with the arguments set to MQDS_MACHINE, ComputerName and NULL respectively.

      • Treat the returned rObject as a QueueManager ADM element instance. Set DoForward to True, and set SiteGuid to the first element in rObject.SiteIdentifierList if either of the following conditions is True:

        • ServerQueueManager.DirectoryServerType is neither PrimaryEnterpriseController nor PrimarySiteController.

        • The first element in rObject.SiteIdentifierList is different from the first element in ServerQueueManager.SiteIdentifierList.

  • If dwObjectType is MQDS_MACHINE, set DoForward to True, and set SiteGuid to the GUID supplied for the PROPID_QM_SITE_ID property ([MS-MQMQ] section 2.3.2.1) if either of the following conditions is True:

    • ServerQueueManager.DirectoryServerType is neither PrimaryEnterpriseController nor PrimarySiteController.

    • The GUID supplied for the PROPID_QM_SITE_ID property differs from the first element in ServerQueueManager.SiteIdentifierList.

  • If DoForward is TRUE, the server raises the Change Remote Object event, as described in the archived [MC-MQDSRP] protocol, section 3.1.7.1.1, with the following arguments:

    • iOperation := 0

    • iObjectType := dwObjectType

    • iPathName := pwszPathName

    • iGuidIdentifier := NULL

    • iPartitionID := SiteGuid

    • iNumberOfProperties := cp

    • iPropertyID := aProp

    • iPropertyValue := apVar

  • If the Change Remote Object event was raised, the rStatus returned by the event becomes the return value of the S_DSCreateObject method, and no further processing is performed.

<23> Section 3.1.4.4: Windows NT adds property identifiers and default values, as specified in [MS-MQMQ], and as listed in the following table.

Property

Default value

PROPID_Q_TYPE (section 2.3.1.2)

GUID, all fields 0

PROPID_Q_JOURNAL (section 2.3.1.4)

0x00

PROPID_Q_QUOTA (section 2.3.1.5)

0xFFFFFFFF

PROPID_Q_BASEPRIORITY (section 2.3.1.6)

0x0000

PROPID_Q_JOURNAL_QUOTA (section 2.3.1.7)

0xFFFFFFFF

PROPID_Q_LABEL (section 2.3.1.8)

Empty Unicode string

PROPID_Q_AUTHENTICATE (section 2.3.1.11)

0x00

PROPID_Q_PRIV_LEVEL (section 2.3.1.12)

0x00000001

PROPID_Q_TRANSACTION (section 2.3.1.13)

0x00

<24> Section 3.1.4.4: Windows NT ignores the supplied security descriptor if the SecurityDescriptor parameter is not NULL.

<25> Section 3.1.4.4: Windows NT adds the property identifiers, as specified in [MS-MQMQ], and the default values listed in the following table.

Property identifier

Default value

PROPID_QM_SERVICE (section 2.3.2.9)

0x00000000

PROPID_QM_INFRS (section 2.3.2.8)

Empty list of GUIDs

PROPID_QM_OUTFRS (section 2.3.2.7)

Empty list of GUIDs

PROPID_QM_QUOTA (section 2.3.2.10)

0xFFFFFFFF

PROPID_QM_JOURNAL_QUOTA (section 2.3.2.14)

0xFFFFFFFF

PROPID_QM_FOREIGN (section 2.3.2.18)

0x00

PROPID_QM_OS (section 2.3.2.19)

0x00000000

PROPID_QM_MACHINE_TYPE (section 2.3.2.15)

Empty Unicode string

PROPID_QM_SIGN_PK (section 2.3.2.37)

Empty

PROPID_QM_ENCRYPT_PK (section 2.3.2.38)

Empty

<26> Section 3.1.4.4: Windows NT continues processing if the SecurityDescriptor parameter is not NULL.

<27> Section 3.1.4.4: If the SecurityDescriptor parameter is not NULL, Windows NT sets QueueManager.Security to the supplied security descriptor.

<28> Section 3.1.4.4: Windows NT ignores the supplied security descriptor if the SecurityDescriptor parameter is not NULL.

<29> Section 3.1.4.4: Windows NT adds the property identifiers and default values listed in the following table.

Property

Default value

PROPID_S_INTERVAL1 (section 2.3.3.5)

0x0002

PROPID_S_INTERVAL2 (section 2.3.3.6)

0x000A

PROPID_S_GATES (section 2.3.3.3)

Empty list of GUIDs

PROPID_S_PSK_SIGNPK (section 2.3.3.14)

Empty

<30> Section 3.1.4.4: Windows NT continues processing if the SecurityDescriptor parameter is not NULL.

<31> Section 3.1.4.4: If the SecurityDescriptor parameter is not NULL, Windows NT sets Site.Security to the supplied security descriptor.

<32> Section 3.1.4.4: For Windows NT, the server performs these steps:

  • Maps the values contained in aProp and apVar to ConnectedNetwork ADM element attributes according to the rules specified in section 3.1.4.21.8.3.6 or, for property identifiers not listed there, in section 3.1.4.21.8.2.10. Ignores property identifiers not listed in either section. If the rules indicate that any property identifier is invalid, the server takes no further action and returns a failure HRESULT.

  • Creates a new ConnectedNetwork ADM element instance using the mapping from the previous step.

  • Sets the created ConnectedNetwork.Security attribute as follows:

    • If the SecurityDescriptor parameter is NULL, to a default security descriptor with the owner SID set to the SID of the calling user. Grant MQSEC_CN_GENERIC_READ access to the group "Everyone". Grant GENERIC_ALL access to the owner.

    • Else, to the value of the SecurityDescriptor parameter.

  • Adds the new ConnectedNetwork ADM element instance to the ConnectedNetworkCollection ADM element.

<33> Section 3.1.4.4: For Windows NT, and Windows 2000  when operating in MSMQ mixed-mode, the server performs these steps:

  • Raises the Propagate Directory Change event, as described in the archived [MC-MQDSRP] protocol, section 3.1.7.1.2, with the following arguments:

    • iOperation := 0

    • iObjectType := dwObjectType

    • iPathName := pwcsPathName

    • iGuidIdentifier := the Identifier attribute of the created directory object

    • iPartitionID is set to:

      • GUID_NULL if dwObjectType is one of MQDS_SITE, MQDS_CN, MQDS_USER, or MQDS_ROUTINGLINK

      • the PartitionIdentifier of the created QueueManager if dwObjectType is MQDS_MACHINE

      • the PartitionIdentifier of the created Queue if dwObjectType is MQDS_QUEUE

    • iNumberOfProperties := cp, as modified in the preceding step

    • iPropertyID := aProp, as modified in the preceding step

    • iPropertyValue := apVar, as modified in the preceding step

    • iSeqNumber := the SequenceNumber attribute of the directory object that was created

<34> Section 3.1.4.5: For Windows NT, and Windows 2000 when operating in MSMQ mixed-mode, the server performs the following steps:

  • Let ServerQueueManager be the QueueManager (section 3.1.1.7) ADM element instance with which the server is co-located.

  • Let DoForward be a boolean that is set to FALSE. Let SiteGuid be a GUID that is set to GUID_NULL.

  • If dwObjectType is one of MQDS_SITE, MQDS_CN, MQDS_ENTERPRISE, MQDS_USER, or MQDS_ROUTINGLINK and ServerQueueManager.DirectoryServerType is not PrimaryEnterpriseController, DoForward is set to TRUE.

  • If dwObjectType is MQDS_QUEUE or MQDS_MACHINE:

    • Let ComputerName be a string. If dwObjectType is MQDS_QUEUE, set ComputerName to the computer name portion of the path name supplied in pwcsPathName, as described in [MS-MQMQ] section 2.1.1. If dwObjectType is MQDS_MACHINE, set ComputerName to pwcsPathName.

    • If ComputerName is different from ServerQueueManager.ComputerName:

      • Generate a Get Directory Object (section 3.1.6.12) event with the arguments set to MQDS_MACHINE, ComputerName and NULL respectively.

      • Treat the returned rObject as a QueueManager ADM element instance. Set DoForward to True, and set SiteGuid to the first element in rObject.SiteIdentifierList if either of the following conditions is True:

        • ServerQueueManager.DirectoryServerType is neither PrimaryEnterpriseController nor PrimarySiteController.

        • The first element in rObject.SiteIdentifierList is different from the first element in ServerQueueManager.SiteIdentifierList.

  • If DoForward is TRUE, the server raises the Change Remote Object event, as described in section 3.1.7.1.1 of the archived [MC-MQDSRP] protocol, with the following arguments:

    • iOperation := 2

    • iObjectType := dwObjectType

    • iPathName := pwcsPathName

    • iGuidIdentifier := NULL

    • iPartitionID := SiteGuid

    • iNumberOfProperties := 0

    • iPropertyID := NULL

    • iPropertyValue := NULL

  • If the Change Remote Object event was raised, the rStatus returned by the event becomes the return value of the S_DSDeleteObject (section 3.1.4.5) method, and no further processing is performed.

<35> Section 3.1.4.5: For Windows NT, and Windows 2000 when operating in MSMQ mixed-mode, the server raises the Propagate Directory Change event, as described in section 3.1.7.1.2 of the archived [MC-MQDSRP] protocol, with the following arguments:

  • iOperation := 2

  • iObjectType := dwObjectType

  • iPathName := pwcsPathName

  • iGuidIdentifier := NULL

  • iPartitionID is set to:

    • GUID_NULL if dwObjectType is one of MQDS_SITE, MQDS_CN, MQDS_ENTERPRISE, MQDS_USER, or MQDS_ROUTINGLINK

    • the PartitionIdentifier attribute of the deleted QueueManager (section 3.1.1.7) ADM element instance if  dwObjectType is MQDS_MACHINE

    • the PartitionIdentifier attribute of the deleted Queue (section 3.1.1.8) ADM element instance if dwObjectType is MQDS_QUEUE

  • iNumberOfProperties := 0

  • iPropertyID := an empty array

  • iPropertyValue := an empty array

  • iSeqNumber := the SequenceNumber attribute of the directory object that was deleted

<36> Section 3.1.4.6: For Windows NT  and Windows 2000 when operating in MSMQ mixed-mode, the server performs the following steps:

  • Let ServerQueueManager be the QueueManager ADM element instance located in the QueueManagerCollection ADM element that corresponds to the queue manager with which the server is co-located.

  • Let DoForward be a boolean that is set to FALSE. Let SiteGuid be a GUID that is set to GUID_NULL.

  • If dwObjectType is one of MQDS_SITE, MQDS_CN, MQDS_ENTERPRISE, MQDS_USER, or MQDS_ROUTINGLINK and ServerQueueManager.DirectoryServerType is not PrimaryEnterpriseController, DoForward is set to TRUE.

  • If dwObjectType is MQDS_QUEUE

    • Generate a Get Directory Object (section 3.1.6.12) event with the arguments set to MQDS_QUEUE, NULL and pGuid respectively.

    • Let ComputerName be the computer name portion of the Pathname attribute of the returned Queue ADM element instance.

    • If ComputerName is different from ServerQueueManager.ComputerName:

      • Generate a Get Directory Object event with the arguments set to MQDS_MACHINE, ComputerName and NULL respectively.

      • Treat the returned rObject as a QueueManager ADM element instance. Set DoForward to TRUE, and set SiteGuid to the first element in rObject.SiteIdentifierList if either of the following conditions is True:

        • ServerQueueManager.DirectoryServerType is neither PrimaryEnterpriseController nor PrimarySiteController.

        • The first element in rObject.SiteIdentifierList is different from the first element in ServerQueueManager.SiteIdentifierList.

  • If dwObjectType is MQDS_MACHINE

    • Generate a Get Directory Object event with the arguments set to MQDS_MACHINE, NULL and pGuid respectively.

    • Treat the returned rObject as a QueueManager ADM element instance. Set DoForward to TRUE, and set SiteGuid to the first element in rObject.SiteIdentifierList if either of the following conditions is True:

      • ServerQueueManager.DirectoryServerType is neither PrimaryEnterpriseController nor PrimarySiteController.

      • The first element in rObject.SiteIdentifierList is different from the first element in ServerQueueManager.SiteIdentifierList.

  • If DoForward is TRUE, the server raises the Change Remote Object event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.1, with the following arguments:

    • iOperation := 2

    • iObjectType := dwObjectType

    • iPathName := NULL

    • iGuidIdentifier := pGuid

    • iPartitionID := SiteGuid

    • iNumberOfProperties := 0

    • iPropertyID := NULL

    • iPropertyValue := NULL

  • If the Change Remote Object event was raised, the rStatus returned by the event becomes the return value of the S_DSDeleteObjectGuid (section 3.1.4.6) method, and no further processing is performed.

<37> Section 3.1.4.6: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the server raises the Propagate Directory Change event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.2, with the following arguments:

  • iOperation := 2

  • iPathName := NULL

  • iGuidIdentifier := pGuid

  • iPartitionID is set to:

    • GUID_NULL if dwObjectType is one of MQDS_SITE, MQDS_CN, MQDS_ENTERPRISE, MQDS_USER, or MQDS_ROUTINGLINK

    • The PartitionIdentifier attribute of the deleted QueueManager ADM element instance if dwObjectType is MQDS_MACHINE

    • the PartitionIdentifier attribute of the deleted Queue ADM element instance if dwObjectType is MQDS_QUEUE

  • iNumberOfProperties := 0

  • iPropertyID := an empty array

  • iPropertyValue := an empty array

  • iSeqNumber := The SequenceNumber attribute of the directory object that was deleted

<38> Section 3.1.4.7: If the cp parameter is 0x00000000, Windows NT returns MQ_OK (0x00000000). If the cp parameter is 0x00000000, Windows 2000 returns MQ_ERROR_INVALID_PARAMETER (0xC00E0006). If the cp parameter is 0x00000000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008 return an error from the RPC runtime.

<39> Section 3.1.4.7: For Windows NT, this function returns MQDS_OBJECT_NOT_FOUND (0xC00E050F) if aProp contains an invalid property identifier. For Windows 2000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008, the following errors are returned if aProp contains an invalid property identifier:

Name

Value

MQ_ERROR

0xC00E0001

MQ_ERROR_DS_ERROR

0xC00E0043

MQDS_OBJECT_NOT_FOUND

0xC00E050F

E_ADS_PROPERTY_NOT_FOUND

0x8000500D

<40> Section 3.1.4.7: If there are no properties specified in aProp, Windows XP returns MQ_OK (0x00000000).

<41> Section 3.1.4.8: If the cp parameter is 0x00000000, Windows NT returns MQ_OK (0x00000000). If the cp parameter is 0x00000000, Windows 2000 returns MQ_ERROR_INVALID_PARAMETER (0xC00E0006). If the cp parameter is 0x00000000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008 return an error from the RPC runtime.

<42> Section 3.1.4.8: For Windows NT, this function returns MQDS_OBJECT_NOT_FOUND (0xC00E050F) if aProp contains an invalid property identifier. For Windows 2000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008, the following errors are returned if aProp contains an invalid property identifier:

Name

Value

MQ_ERROR

0xC00E0001

MQ_ERROR_DS_ERROR

0xC00E0043

MQDS_OBJECT_NOT_FOUND

0xC00E050F

E_ADS_PROPERTY_NOT_FOUND

0x8000500D

<43> Section 3.1.4.8: If there are no properties specified in aProp, Windows XP returns MQ_OK (0x00000000).

<44> Section 3.1.4.9: If the cp parameter is 0x00000000, Windows NT returns MQ_OK. If the cp parameter is 0x00000000, Windows 2000 returns MQ_ERROR_INVALID_PARAMETER (0xC00E0006). If the cp parameter is 0x00000000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008 return an error from the RPC runtime.

<45> Section 3.1.4.9: For Windows NT and Windows 2000 when operating in MSMQ mixed-mode, the server performs the following steps:

  • Let ServerQueueManager be the QueueManager ADM element instance located in the QueueManagerCollection that corresponds to the Queue Manager with which the server is co-located.

  • Let DoForward be a boolean that is set to FALSE. Let SiteGuid be a GUID that is set to GUID_NULL.

  • If dwObjectType is one of MQDS_SITE, MQDS_CN, MQDS_ENTERPRISE, MQDS_USER, or MQDS_ROUTINGLINK and ServerQueueManager.DirectoryServerType is not PrimaryEnterpriseController, then DoForward is set to TRUE.

  • If dwObjectType is MQDS_QUEUE or MQDS_MACHINE:

    • Let ComputerName be a string. If dwObjectType is MQDS_QUEUE, set ComputerName to the computer name portion of the path name supplied in pwcsPathName, as described in [MS-MQMQ] section 2.1.1. If dwObjectType is MQDS_MACHINE, set ComputerName to pwcsPathName.

    • If ComputerName is different from ServerQueueManager.ComputerName:

      • Generate a Get Directory Object (section 3.1.6.12) event with the arguments set to MQDS_MACHINE, ComputerName and NULL respectively.

      • Treat the returned rObject as a QueueManager ADM element instance. Set DoForward to TRUE, and set SiteGuid to the first element in rObject.SiteIdentifierList if either of the following conditions is True:

        • ServerQueueManager.DirectoryServerType is neither PrimaryEnterpriseController nor PrimarySiteController.

        • The first element in rObject.SiteIdentifierList is different from the first element in ServerQueueManager.SiteIdentifierList.

  • If DoForward is TRUE, the server raises the Change Remote Object event, as described in the archived [MC-MQDSRP] protocol, section 3.1.7.1.1, with the following arguments:

    • iOperation := 1

    • iObjectType := dwObjectType

    • iPathName := pwcsPathName

    • iGuidIdentifier := NULL

    • iPartitionID := SiteGuid

    • iNumberOfProperties := cp

    • iPropertyID := aProp

    • iPropertyValue := apVar

  • If the Change Remote Object event was raised, the rStatus returned by the event becomes the return value of the S_DSSetProps method, and no further processing is performed.

<46> Section 3.1.4.9: Only Windows NT Server supports this object type and updates the properties as specified. Windows 2000, Windows Server 2003 and Windows Server 2008 treat this type as invalid.

<47> Section 3.1.4.9: The event is generated only for Windows NT and Windows 2000.

<48> Section 3.1.4.9: The event is generated only for Windows NT and Windows 2000.

<49> Section 3.1.4.10: If the cp parameter is 0x00000000, Windows NT returns MQ_OK. If the cp parameter is 0x00000000, Windows 2000 returns MQ_ERROR_INVALID_PARAMETER (0xC00E0006). Otherwise, if the cp parameter is 0x00000000, Windows returns an error from the RPC runtime.

<50> Section 3.1.4.10: For Windows NT and Windows 2000 when operating in MSMQ mixed-mode, the server performs the following steps:

  • Let ServerQueueManager be the QueueManager ADM element instance located in the QueueManagerCollection ADM element instance that corresponds to the queue manager with which the server is co-located.

  • Let DoForward be a boolean that is set to FALSE. Let SiteGuid be a GUID that is set to GUID_NULL.

  • If dwObjectType is one of MQDS_SITE, MQDS_CN, MQDS_ENTERPRISE, MQDS_USER, or MQDS_ROUTINGLINK and ServerQueueManager.DirectoryServerType is not PrimaryEnterpriseController, DoForward is set to TRUE.

  • If dwObjectType is MQDS_QUEUE

    • Generate a Get Directory Object (section 3.1.6.12) event with the arguments set to MQDS_QUEUE, NULL and pGuid respectively.

    • Let ComputerName be the computer name portion of the Pathname attribute of the returned Queue ADM element instance.

    • If ComputerName is different from ServerQueueManager.ComputerName:

      • Generate a Get Directory Object event with the arguments set to MQDS_MACHINE, ComputerName and NULL respectively.

      • Treat the returned rObject as a QueueManager ADM element instance. Set DoForward to TRUE, and set SiteGuid to the first element in rObject.SiteIdentifierList if either of the following conditions is True:

        • ServerQueueManager.DirectoryServerType is neither PrimaryEnterpriseController nor PrimarySiteController.

        • The first element in rObject.SiteIdentifierList is different from the first element in ServerQueueManager.SiteIdentifierList.

  • If dwObjectType is MQDS_MACHINE

    • Generate a Get Directory Object event with the arguments set to MQDS_MACHINE, NULL and pGuid respectively.

    • Treat the returned rObject as a QueueManager ADM element instance. Set DoForward to TRUE, and set SiteGuid to the first element in rObject.SiteIdentifierList if either of the following conditions is True:

      • ServerQueueManager.DirectoryServerType is neither PrimaryEnterpriseController nor PrimarySiteController.

      • The first element in rObject.SiteIdentifierList is different from the first element in ServerQueueManager.SiteIdentifierList.

  • If DoForward is TRUE, the server raises the Change Remote Object event, as described in the archived [MC-MQDSRP] protocol, section 3.1.7.1.1, with the following arguments:

    • iOperation := 1

    • iObjectType := dwObjectType

    • iPathName := NULL

    • iGuidIdentifier := pGuid

    • iPartitionID := SiteGuid

    • iNumberOfProperties := cp

    • iPropertyID := aProp

    • iPropertyValue := apVar

  • If the Change Remote Object event was raised, the rStatus returned by the event becomes the return value of the S_DSSetPropsGuid method, and no further processing is performed.

<51> Section 3.1.4.10: Only Windows NT Server supports this object type and updates the properties as specified. Windows 2000, Windows Server 2003 and Windows Server 2008 treat this type as invalid.

<52> Section 3.1.4.10: The event is generated only for Windows NT and Windows 2000.

<53> Section 3.1.4.10: The event is generated only for Windows NT and Windows 2000.

<54> Section 3.1.4.10: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the server raises the Propagate Directory Change event (archived [MC-MQDSRP] protocol section 3.1.7.1.2) with the following arguments:

  • iOperation := 1

  • iObjectType := dwObjectType

  • iPathName := NULL

  • iGuidIdentifier := pGuid

  • iPartitionID is set to:

    • GUID_NULL if dwObjectType is one of MQDS_SITE, MQDS_CN, MQDS_ENTERPRISE, MQDS_USER, or MQDS_ROUTINGLINK

    • the PartitionIdentifier attribute of the updated QueueManager ADM element instance if dwObjectType is MQDS_MACHINE

    • the PartitionIdentifier attribute of the updated Queue ADM element instance if dwObjectType is MQDS_QUEUE

  • iNumberOfProperties := cp

  • iPropertyID := aProp

  • iPropertyValue := apVar

  • iSeqNumber := the SequenceNumber attribute of the directory object that was updated

<55> Section 3.1.4.11: Other key BLOB types might be supported but are untested. Windows uses only RSAPUBKEY (section 2.2.18) BLOBs.

<56> Section 3.1.4.11: For Windows NT, Windows 2000, and Windows XP, the server returns MQ_ERROR_INVALID_PARAMETER (0xC00E0006) rather than throwing the RPC exception.

<57> Section 3.1.4.11: Windows NT, Windows 2000, and Windows XP return MQ_ERROR_INVALID_PARAMETER (0xC00E0006). Windows Server 2003, Windows Vista, and Windows Server 2008 return MQDS_WRONG_OBJ_TYPE (0xC00E0506).

<58> Section 3.1.4.11: For Windows NT, Windows 2000, and Windows XP, the server returns MQ_ERROR_INVALID_PARAMETER (0xC00E0006) rather than throwing the RPC exception.

<59> Section 3.1.4.12: Other key BLOB types might be supported but are untested. Windows uses only RSAPUBKEY (section 2.2.18) BLOBs.

<60> Section 3.1.4.12: For Windows NT, Windows 2000, and Windows XP, the server returns MQ_ERROR_INVALID_PARAMETER (0xC00E0006) rather than throwing the RPC exception.

<61> Section 3.1.4.12: Windows NT, Windows 2000, and Windows XP return MQ_ERROR_INVALID_PARAMETER (0xC00E0006). Windows Server 2003, Windows Vista, and Windows Server 2008 return MQDS_WRONG_OBJ_TYPE (0xC00E0506).

<62> Section 3.1.4.12: For Windows NT, Windows 2000, and Windows XP, the server returns MQ_ERROR_INVALID_PARAMETER (0xC00E0006) rather than throwing the RPC exception.

<63> Section 3.1.4.13: Other key BLOB types might be supported but are untested. Windows uses only RSAPUBKEY (section 2.2.18) BLOBs.

<64> Section 3.1.4.13: For Windows NT and Windows 2000 when operating in MSMQ mixed-mode, the server performs the following steps:

  • Let ServerQueueManager be the QueueManager ADM element instance located in the QueueManagerCollection ADM element instance that corresponds to the queue manager with which the server is co-located.

  • Let DoForward be a boolean that is set to FALSE. Let SiteGuid be a GUID that is set to GUID_NULL.

  • If dwObjectType is one of MQDS_SITE, MQDS_CN, MQDS_ENTERPRISE, MQDS_USER, or MQDS_ROUTINGLINK and ServerQueueManager.DirectoryServerType is not PrimaryEnterpriseController, DoForward is set to TRUE.

  • If dwObjectType is MQDS_QUEUE or if dwObjectType is MQDS_MACHINE and SecurityInformation is a bitwise OR of any combination of OWNER_SECURITY_INFORMATION, GROUP_SECURITY_INFORMATION, SACL_SECURITY_INFORMATION, and DACL_SECURITY_INFORMATION:

    • Let ComputerName be a string. If dwObjectType is MQDS_QUEUE, set ComputerName to the computer name portion of the path name supplied in pwcsPathName, as described in [MS-MQMQ] section 2.1.1. If dwObjectType is MQDS_MACHINE, set ComputerName to pwcsPathName.

    • If ComputerName is different from ServerQueueManager.ComputerName:

      • Generate a Get Directory Object (section 3.1.6.12) event with the arguments set to MQDS_MACHINE, ComputerName and NULL respectively.

      • Treat the returned rObject as a QueueManager ADM element instance. Set DoForward to TRUE, and set SiteGuid to the first element in rObject.SiteIdentifierList if either of the following conditions is True:

        • ServerQueueManager.DirectoryServerType is neither PrimaryEnterpriseController nor PrimarySiteController.

        • The first element in rObject.SiteIdentifierList is different from the first element in ServerQueueManager.SiteIdentifierList.

  • If DoForward is TRUE, the server raises the Change Remote Object event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.1 with the following arguments:

    • iOperation := 1

    • iObjectType := dwObjectType

    • iPathName := pwcsPathName

    • iGuidIdentifier := NULL

    • iPartitionID := SiteGuid

    • iNumberOfProperties := 1

    • iPropertyID := a one-element array as follows:

    dwObjectType

    iPropertyID

    MQDS_QUEUE

    PROPID_Q_SECURITY

    MQDS_MACHINE

    PROPID_QM_SECURITY

    MQDS_CN

    PROPID_CN_SECURITY

    • iPropertyValue := a one-element array consisting of a PROPVARIANT ([MS-MQMQ] section 2.2.13.2) structure with these fields set:

      • vt field := VT_BLOB

      • blob.cbSize := nlength

      • blob.pBlobData := pSecurityDescriptor

  • If the Change Remote Object event was raised, the rStatus returned by the event becomes the return value of the S_DSSetObjectSecurity (section 3.1.4.13) method, and no further processing is performed.

<65> Section 3.1.4.13: The event is generated only for Windows NT and Windows 2000.

<66> Section 3.1.4.13: The event is generated only for Windows NT and Windows 2000.

<67> Section 3.1.4.13: For Windows NT and Windows 2000 when operating in MSMQ mixed-mode, the server raises the Propagate Directory Change event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.2, with the following arguments:

  • iOperation := 1

  • iObjectType := dwObjectType

  • iPathName := pwcsPathName

  • iGuidIdentifier := NULL

  • iPartitionID := The PartitionIdentifier attribute of the directory object that was updated

  • iNumberOfProperties := 1

  • iPropertyID := a one-element array as follows:

    dwObjectType

    iPropertyID

    MQDS_QUEUE

    PROPID_Q_SECURITY

    MQDS_MACHINE

    PROPID_QM_SECURITY

    MQDS_CN

    PROPID_CN_SECURITY

  • iPropertyValue := a one-element array consisting of a PROPVARIANT ([MS-MQMQ] section 2.2.13.2) structure with these fields set:

    • vt field := VT_BLOB

    • blob.cbSize := nlength

    • blob.pBlobData := pSecurityDescriptor

  • iSeqNumber := the SequenceNumber attribute of the Queue ADM element instance that was updated

<68> Section 3.1.4.14: Other key BLOB types might be supported but are untested. Windows uses only RSAPUBKEY (section 2.2.18) BLOBs.

<69> Section 3.1.4.14: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the server performs the following steps:

  • Let ServerQueueManager be the QueueManager ADM element instance located in the QueueManagerCollection ADM element that corresponds to the queue manager with which the server is co-located.

  • Let DoForward be a boolean that is set to FALSE. Let SiteGuid be a GUID that is set to GUID_NULL.

  • If dwObjectType is one of MQDS_SITE, MQDS_CN, MQDS_USER, or MQDS_ROUTINGLINK and ServerQueueManager.DirectoryServerType is not PrimaryEnterpriseController, DoForward is set to TRUE.

  • If dwObjectType is MQDS_QUEUE

    • Generate a Get Directory Object (section 3.1.6.12) event with the arguments set to MQDS_QUEUE, NULL and pGuid respectively.

    • Let ComputerName be the computer name portion of Pathname attribute of the returned Queue ADM element instance.

    • If ComputerName is different from ServerQueueManager.ComputerName:

      • Generate a Get Directory Object event with the arguments set to MQDS_MACHINE, ComputerName and NULL respectively.

      • Treat the returned rObject as a QueueManager ADM element instance. Set DoForward to TRUE, and set SiteGuid to the first element in rObject.SiteIdentifierList if either of the following conditions is True:

        • ServerQueueManager.DirectoryServerType is neither PrimaryEnterpriseController nor PrimarySiteController.

        • The first element in rObject.SiteIdentifierList is different from the first element in ServerQueueManager.SiteIdentifierList.

  • If dwObjectType is MQDS_MACHINE

    • Generate a Get Directory Object event with the arguments set to MQDS_MACHINE, NULL and pGuid respectively.

    • Treat the returned rObject as a QueueManager ADM element instance. Set DoForward to TRUE, and set SiteGuid to the first element in rObject.SiteIdentifierList if either of the following conditions is True:

      • ServerQueueManager.DirectoryServerType is neither PrimaryEnterpriseController nor PrimarySiteController.

      • The first element in rObject.SiteIdentifierList is different from the first element in ServerQueueManager.SiteIdentifierList.

  • If DoForward is TRUE, the server raises the Change Remote Object event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.1, with the following arguments:

    • iOperation := 1

    • iObjectType := dwObjectType

    • iPathName := NULL

    • iGuidIdentifier := pGUID

    • iPartitionID := SiteGuid

    • iNumberOfProperties := 1

    • iPropertyID := a one-element array as follows:

    dwObjectType

    iPropertyID

    MQDS_QUEUE

    PROPID_Q_SECURITY

    MQDS_MACHINE

    PROPID_QM_SECURITY

    MQDS_CN

    PROPID_CN_SECURITY

    • iPropertyValue := a one-element array consisting of a PROPVARIANT ([MS-MQMQ] section 2.2.13.2) structure with these fields set:

      • vt field := VT_BLOB

      • blob.cbSize := nLength

      • blob.pBlobData := pSecurityDescriptor

  • If the Change Remote Object event was raised, the rStatus returned by the event becomes the return value of the S_DSSetObjectSecurityGuid (section 3.1.4.14) method, and no further processing is performed.

<70> Section 3.1.4.14: The event is generated only for Windows NT and Windows 2000.

<71> Section 3.1.4.14: The event is generated only for Windows NT and Windows 2000.

<72> Section 3.1.4.14: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the server raises the Propagate Directory Change event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.2, with the following arguments:

  • iOperation := 1

  • iObjectType := dwObjectType

  • iPathName := NULL

  • iGuidIdentifier := pGUID

  • iPartitionID := the PartitionIdentifier attribute of the directory object that was updated

  • iNumberOfProperties := 1

  • iPropertyID := a one-element array as follows:

    dwObjectType

    iPropertyID

    MQDS_QUEUE

    PROPID_Q_SECURITY

    MQDS_MACHINE

    PROPID_QM_SECURITY

    MQDS_CN

    PROPID_CN_SECURITY

  • iPropertyValue := a one-element array consisting of a PROPVARIANT ([MS-MQMQ] section 2.2.13.2) structure with these fields set:

    • vt field := VT_BLOB

    • blob.cbSize := nLength

    • blob.pBlobData := pSecurityDescriptor

  • iSeqNumber := the SequenceNumber attribute of the Queue ADM element instance that was updated.

<73> Section 3.1.4.15: Other key BLOB types might be supported but are untested. Windows uses only RSAPUBKEY (section 2.2.18) BLOBs.

<74> Section 3.1.4.15: Only Windows NT Server, Windows 2000, and Windows Server 2003 invoke the S_DSQMGetObjectSecurityChallengeResponceProc (section 3.2.4.2) callback method to authenticate the client as follows:

  • Invoke S_DSQMGetObjectSecurityChallengeResponceProc with parameters set as follows:

    • abChallenge := A byte array of size 32 containing cryptographically random bytes.

    • dwCallengeSize := The size in bytes of abChallenge.

    • dwContext := the dwContext parameter of the S_DSQMGetObjectSecurity (section 3.1.4.15) method.

    • abCallengeResponce := A byte array of size 128.

    • pdwCallengeResponceSize := A pointer to a DWORD value.

    • dwCallengeResponceMaxSize := The size in bytes of abCallengeResponce.

  • If the callback does not return ERROR_SUCCESS, return an error result, and take no further action.

  • If the dwObjectType parameter is MQDS_QUEUE:

    • Generate a Get Directory Object (section 3.1.6.12) event with the following arguments:

      • iObjectType := MQDS_QUEUE

      • iPathName := NULL

      • iGuid := pObjectGuid

    • If rStatus of the event is not MQ_OK, return rStatus, and take no further action. The returned object, rObject, is a Queue ADM element instance. Save the computer name part in rObject.PathName to a variable called computerPathName.

  • Generate a Get Directory Object event with arguments set as follows:

    • iObjectType := MQDS_MACHINE

    • iPathName := computerPathName if dwObjectType is MQDS_QUEUE; otherwise, NULL.

    • iGuid := NULL if dwObjectType is MQDS_QUEUE; otherwise, pObjectGuid.

  • If rStatus of the event is not MQ_OK, return rStatus, and take no further action. Otherwise, the event returns rObject, which is a QueueManager ADM element instance. Extract the MQDSPUBLICKEY ([MS-MQMQ] section 2.2.1) structure from the rObject. PublicSigningKeyList that contains an sProviderName field equal to "Microsoft Base Cryptographic Provider v1.0". From this structure, extract the aBuf field, and use it as the public key, referred to as publicKey, for verifying the client signature.

  • Create an MD5 hash context, and add the same random set of bytes that was passed to S_DSQMGetObjectSecurityChallengeResponceProc.

  • Decrypt the returned client signature abCallengeResponce using publicKey. Compare the result to the MD5 hash computed by the server. If the result and the MD5 hash do not match, return MQ_ERROR_ACCESS_DENIED, and take no further action.

<75> Section 3.1.4.15: Windows NT Server, Windows 2000, and Windows XP return MQ_ERROR_INVALID_PARAMETER (0xC00E0006). Windows Server 2003, Windows Vista, and Windows Server 2008 return MQDS_WRONG_OBJ_TYPE (0xC00E0506)

<76> Section 3.1.4.16: The S_DSQMSetMachineProperties method is called only by Windows NT 4.0.

<77> Section 3.1.4.16: Only Windows NT Server, Windows 2000, and Windows Server 2003 authenticate the client as follows:

  • Invoke the S_DSQMSetMachinePropertiesSignProc (section 3.2.4.1) callback method with parameters set as follows:

    • abChallenge := A byte array of size 32 containing cryptographically random bytes.

    • dwCallengeSize := The size in bytes of abChallenge.

    • dwContext := the dwContext parameter of the S_DSQMGetObjectSecurity (section 3.1.4.15) method.

    • abSignature := A byte array of size 128.

    • pdwSignatureSize := A pointer to an unsigned long value.

    • dwSignatureMaxSize := The size in bytes of abSignature.

  • If the S_DSQMSetMachinePropertiesSignProc callback method does not return ERROR_SUCCESS, return an error result, and take no further action.

  • Generate a Get Directory Object (section 3.1.6.12) event with arguments set as follows:

    • iObjectType := MQDS_MACHINE

    • iPathName := pwcsPathName

    • iGuid := NULL

  • If rStatus of the event is not MQ_OK, return rStatus, and take no further action. Otherwise, the event returns rObject, which is a QueueManager ADM element instance. Extract the MQDSPUBLICKEY ([MS-MQMQ] section 2.2.1) structure from the rObject.PublicSigningKeyList that contains an sProviderName field equal to "Microsoft Base Cryptographic Provider v1.0". From this structure, extract the aBuf field, and use it as the public key, referred to as publicKey, for verifying the client signature.

  • Create an MD5 hash context and add:

    • The same random set of bytes that was passed to the S_DSQMSetMachinePropertiesSignProc callback method.

    • cp

    • For each property in aProp, add the DWORD value of the property identifier and the associated type-specific value in apVar. The value and length are defined by the variant type of the property (apVar[].vt).

  • Decrypt the returned client signature abSignature using publicKey. Compare the result to the MD5 hash computed by the server. If they do not match, return MQ_ERROR_ACCESS_DENIED, and take no further action.

<78> Section 3.1.4.16: If the cp parameter is 0x00000000, Windows NT returns MQ_OK. If the cp parameter is 0x00000000, Windows 2000 returns MQ_ERROR_INVALID_PARAMETER (0xC00E0006). If the cp parameter is 0x00000000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008 return an error from the RPC runtime.

<79> Section 3.1.4.16: For Windows NT, this function returns MQDS_OBJECT_NOT_FOUND (0xC00E050F) if aProp contains an invalid property identifier. For Windows 2000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008, the following errors are returned if aProp contains an invalid property identifier:

Name

Value

MQ_ERROR

0xC00E0001

MQ_ERROR_DS_ERROR

0xC00E0043

MQDS_OBJECT_NOT_FOUND

0xC00E050F

E_ADS_PROPERTY_NOT_FOUND

0x8000500D

<80> Section 3.1.4.16: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the server performs the following steps:

  • Let ServerQueueManager be the QueueManager ADM element instance located in the QueueManagerCollection ADM element instance that corresponds to the queue manager with which the server is co-located.

  • Let DoForward be a boolean that is set to FALSE. Let SiteGuid be a GUID that is set to GUID_NULL.

  • If pwcsPathName is different from ServerQueueManager.ComputerName:

    • Generate a Get Directory Object (section 3.1.6.12) event with the arguments set to MQDS_MACHINE, pwcsPathName and NULL respectively.

    • Treat the returned rObject as a QueueManager ADM element instance. Set DoForward to TRUE, and set SiteGuid to the first element in rObject.SiteIdentifierList if either of the following conditions is True:

      • ServerQueueManager.DirectoryServerType is neither PrimaryEnterpriseController nor PrimarySiteController.

      • The first element in rObject.SiteIdentifierList is different from the first element in ServerQueueManager.SiteIdentifierList.

  • If DoForward is TRUE, the server raises the Change Remote Object event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.1 with the following arguments:

    • iOperation := 1

    • iObjectType := MQDS_MACHINE

    • iPathName := pwcsPathName

    • iGuidIdentifier := NULL

    • iPartitionID := SiteGuid

    • iNumberOfProperties := cp

    • iPropertyID := aProp

    • iPropertyValue := apVar

  • If the Change Remote Object event was raised, the rStatus returned by the event becomes the return value of the S_DSSetMachineProperties (section 3.1.4.16) method, and no further processing is performed

<81> Section 3.1.4.16: For Windows NT, this function returns MQDS_OBJECT_NOT_FOUND (0xC00E050F) if aProp contains an invalid property identifier. For Windows 2000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008, the following errors are returned if aProp contains an invalid property identifier:

Name

Value

MQ_ERROR

0xC00E0001

MQ_ERROR_DS_ERROR

0xC00E0043

MQDS_OBJECT_NOT_FOUND

0xC00E050F

E_ADS_PROPERTY_NOT_FOUND

0x8000500D

<82> Section 3.1.4.16: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the server raises the Propagate Directory Change event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.2, with the following arguments:

  • iOperation := 1

  • iObjectType := MQDS_MACHINE

  • iPathName := pwcsPathName

  • iGuidIdentifier := NULL

  • iPartitionID := the PartitionIdentifier attribute of the QueueManager ADM element instance that was updated

  • iNumberOfProperties := cp

  • iPropertyID := aProp

  • iPropertyValue := apVar

  • iSeqNumber := the SequenceNumber attribute of the QueueManager ADM element instance that was updated

<83> Section 3.1.4.16: The event is generated only for Windows NT and Windows 2000.

<84> Section 3.1.4.21.6: For Windows NT, the directory objects specified in section 3.1.1.14 are partitioned as described in the archived [MC-MQDSRP] protocol section 1.3.1.2. Each Windows NT Directory Service server maintains all directory objects, but owns the write access to a portion of the objects. If a server does not own the object, it forwards the write request to the owner instead. The owner also propagates directory changes to other servers. Directory Service servers on Windows 2000 Server, Windows Server 2003 and Windows Server 2008 do not maintain the directory objects. Instead, the objects are stored in the Active Directory and are no longer partitioned. These directory servers communicate with the domain controller on behalf of the directory clients and act as gateways to support Message Queuing (MSMQ): Directory Service Protocol clients to access the Active Directory based directory service. Windows 2000, when operating in MSMQ mixed-mode, supports the replication between a Windows NT directory service and the Active Directory based directory service.

<85> Section 3.1.4.21.7: Windows NT uses the archived protocol defined in [MC-MQDSRP] to perform this replication. Windows 2000 also uses that protocol when operating in MSMQ mixed-mode. When the directory objects are stored in Active Directory, the replication is done by Active Directory.

<86> Section 3.1.4.21.8.2.1: For Windows NT, the QueueManager.Identifier attribute is set to the GUID value supplied for this property.

<87> Section 3.1.4.21.8.2.1: For Windows NT, the QueueManager.ComputerName attribute is set to the NULL-terminated 16-bit Unicode string value supplied for this property.

<88> Section 3.1.4.21.8.2.1: For Windows NT, the QueueManager.ConnectedNetworkIdentifierList attribute is set to the list of GUID values supplied for this property.

<89> Section 3.1.4.21.8.2.1: For Windows NT, the PROPID_QM_SERVICE property identifier sets the QueueManager attributes DirectoryServer, DirectoryServerType, RoutingServer, and RemoteAccessServer according to the steps defined in section 3.1.4.21.8.3.2.

<90> Section 3.1.4.21.8.2.1: For Windows NT, the QueueManager.CreateTime attribute is set to the integer value supplied for this property.

<91> Section 3.1.4.21.8.2.1: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the server populates the SequenceNumber attribute by raising the Read Next Sequence Number event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.3 with the following argument:

  • iPartitionID := the GUID in the PartitionIdentifier attribute of the QueueManager object

The SequenceNumber attribute is set to the contents of rSeqNumber returned by the event.

<92> Section 3.1.4.21.8.2.4: For Windows NT, the Queue.Identifier attribute is set to the GUID value supplied for this property.

<93> Section 3.1.4.21.8.2.4: For Windows NT, the Queue.Pathname attribute is set to the NULL-terminated 16-bit Unicode string value supplied for this property.

<94> Section 3.1.4.21.8.2.4: For Windows NT, the Queue.CreateTime attribute is set to the integer value supplied for this property.

<95> Section 3.1.4.21.8.2.4: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the server populates the SequenceNumber attribute by raising the Read Next Sequence Number event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.3, with the following argument:

  • iPartitionID := the GUID in the PartitionIdentifier attribute of the Queue object.

The SequenceNumber attribute is set to the contents of rSeqNumber returned by the event.

<96> Section 3.1.4.21.8.2.6: For Windows NT, the Enterprise.Name attribute is set to the NULL-terminated 16-bit Unicode string value supplied for this property.

<97> Section 3.1.4.21.8.2.6: For Windows NT, the Enterprise.Identifier attribute is set to the GUID value supplied for this property.

<98> Section 3.1.4.21.8.2.6: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the server populates the SequenceNumber attribute by raising the Read Next Sequence Number event, as described in the archived [MC-MQDSRP] protocol, section 3.1.7.1.3, with the following argument:

  • iPartitionID := GUID_NULL

The SequenceNumber attribute is set to the contents of rSeqNumber returned by the event.

<99> Section 3.1.4.21.8.2.8: For Windows NT, the Site.Name attribute is set to the NULL-terminated 16-bit Unicode string value supplied for this property.

<100> Section 3.1.4.21.8.2.8: For Windows NT, the Site.Identifier attribute is set to the GUID value supplied for this property.

<101> Section 3.1.4.21.8.2.8: For Windows NT, this property identifier is treated as invalid.

<102> Section 3.1.4.21.8.2.8: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the server populates the SequenceNumber attribute by raising the Read Next Sequence Number event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.3 with the following argument:

  • iPartitionID := GUID_NULL

The SequenceNumber attribute is set to the contents of rSeqNumber returned by the event.

<103> Section 3.1.4.21.8.2.9: For Windows NT, the RoutingLink.Site1Identifier attribute is set to the GUID value supplied for this property.

<104> Section 3.1.4.21.8.2.9: For Windows NT, the RoutingLink.Site2Identifier attribute is set to the GUID value supplied for this property.

<105> Section 3.1.4.21.8.2.9: For Windows NT, the RoutingLink.Identifier attribute is set to the GUID value supplied for this property.

<106> Section 3.1.4.21.8.2.9: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the server populates the SequenceNumber attribute by raising the Read Next Sequence Number event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.3 with the following argument:

  • iPartitionID := GUID_NULL

The SequenceNumber attribute is set to the contents of rSeqNumber returned by the event.

<107> Section 3.1.4.21.8.2.10: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the server populates the SequenceNumber attribute by raising the Read Next Sequence Number event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.3 with the following argument:

  • iPartitionID := GUID_NULL

The SequenceNumber attribute is set to the contents of rSeqNumber returned by the event.

<108> Section 3.1.4.21.8.2.12: For Windows NT and Windows 2000, when operating in MSMQ mixed-mode, the server populates the SequenceNumber attribute by raising the Read Next Sequence Number event, as described in the archived [MC-MQDSRP] protocol section 3.1.7.1.3 with the following argument:

  • iPartitionID := GUID_NULL

The SequenceNumber attribute is set to the contents of rSeqNumber returned by the event.

<109> Section 3.1.4.21.8.3.1: For Windows NT, the server does not create a GUID, and PROPID_QM_MACHINE_ID is required.

<110> Section 3.1.4.21.8.3.1: For Windows NT, the server sets QueueManager.ComputerName to the value of the PROPID_QM_PATHNAME property.

<111> Section 3.1.4.21.8.3.1: For Windows NT, the QueueManager. ComputerNetworkAddressCollection attribute is populated with the addresses in the property value.

<112> Section 3.1.4.21.8.3.1: For Windows NT, this property is ignored if present.

<113> Section 3.1.4.21.8.3.1: For Windows NT, this property is ignored if present.

<114> Section 3.1.4.21.8.3.3: For Windows NT, this property is ignored if present.

<115> Section 3.1.4.21.8.3.3: For Windows NT, this property is ignored if present.

<116> Section 3.1.4.21.8.3.3: For Windows NT, this property is treated as invalid.

<117> Section 3.1.4.21.8.3.3: For Windows NT, this property is treated as invalid.

<118> Section 3.1.4.21.8.3.4: For Windows NT, the server sets Site.Name to the value of the PROPID_S_PATHNAME property.

<119> Section 3.1.4.21.8.3.4: For Windows NT, the server does not create a GUID, and PROPID_S_SITEID is required.

<120> Section 3.1.4.21.8.3.4: For Windows NT, the server sets Site.PrimarySiteController to the value of the PROPID_S_PSC property.

<121> Section 3.1.4.21.8.3.4: For Windows NT, this property identifier is ignored if present.

<122> Section 3.1.4.21.8.3.5: For Windows NT, the server does not create a GUID, and PROPID_L_ID is required.

<123> Section 3.1.6.3: Not every version of Windows supports every property identifier. See the descriptions of individual property identifiers in [MS-MQMQ] section 2.3 to determine which property identifiers are valid for each version of Windows. If a property identifier is not valid for the version of Windows on which the server is running, it is treated as not valid for the object type specified in iObjectType.

<124> Section 3.1.6.3: The property identifiers required depend on the type of object indicated in iObjectType and the version of Windows. The following table lists the required property identifiers by type of object and Windows version. The property identifiers listed are defined in subsections of [MS-MQMQ] section 2.3.

Object Type

Windows NT

Windows 2000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008

MQDS_QUEUE

PROPID_Q_PATHNAME

none

MQDS_MACHINE

PROPID_QM_SITE_ID, PROPID_QM_MACHINE_ID, PROPID_QM_PATHNAME, PROPID_QM_CNS, PROPID_QM_ADDRESS

none

MQDS_SITE

PROPID_S_SITEID, PROPID_S_PSC

none

MQDS_CN

PROPID_CN_GUID

object cannot be created

MQDS_ENTERPRISE

object cannot be created

object cannot be created

MQDS_USER

PROPID_U_SIGN_CERT, PROPID_U_DIGEST

PROPID_U_SIGN_CERT, PROPID_U_DIGEST

MQDS_ROUTINGLINK

PROPID_L_NEIGHBOR1, PROPID_L_NEIGHBOR2, PROPID_L_COST, PROPID_L_ID

PROPID_L_NEIGHBOR1, PROPID_L_NEIGHBOR2,exactly one of PROPID_L_COST or PROPID_L_ACTUAL_COST

<125> Section 3.1.6.3: For Windows NT and Windows 2000 when operating in MSMQ mixed-mode the following steps are performed.

  • Let ServerQueueManager be the QueueManager ADM element instance located in the QueueManagerCollection ADM element instance that corresponds to the queue manager with which the server is co-located.

  • If ServerQueueManager.DirectoryServerType is PrimaryEnterpriseController, return an error.

  • Create a new Enterprise ADM element instance using the values contained in iPropertyID and iPropertyValue with the changes listed as follows. Enterprise property identifiers are specified in [MS-MQMQ] section 2.3.5.

    • Enterprise.Identifier is set from the PROPID_E_ID property.

    • Enterprise.SequenceNumber is set from iSeqNumber.

    • Invalid property identifiers are ignored.

<126> Section 3.1.6.3: For Windows NT, the server performs these steps instead:

  • Create a new ConnectedNetwork ADM element instance using the values contained in iPropertyID and iPropertyValue according to the rules specified in section 3.1.4.21.8.3.6 with the changes listed as follows and assign it to dirObject. Connected network property identifiers are specified in [MS-MQMQ] section 2.3.4.

    • ConnectedNetwork.SequenceNumber is set from iSeqNumber.

    • Invalid property identifiers are ignored.

<127> Section 3.1.6.3: For Windows NT and Windows 2000 when operating in MSMQ mixed-mode, the server raises the Propagate Directory Change (archived [MC-MQDSRP] protocol section 3.1.7.1.2) event with the following arguments:

  • iOperation := 0

  • iObjectType := iObjectType

  • iPathName := iPathName

  • iGuidIdentifier := NULL

  • iPartitionID := iPartitionID

  • iNumberOfProperties := iNumberOfProperties

  • iPropertyID := iPropertyID

  • iPropertyValue := iPropertyValue

  • iSeqNumber := iSeqNumber

<128> Section 3.1.6.4: Only Windows NT Server supports these object types and updates the properties as specified. Windows 2000, Windows Server 2003 and Windows Server 2008 treat these types as invalid.

<129> Section 3.1.6.4: For Windows NT and Windows 2000 when operating in MSMQ mixed-mode, the server raises the Propagate Directory Change (archived [MC-MQDSRP] protocol section 3.1.7.1.2) event with the following arguments:

  • iOperation := 1

  • iObjectType := iObjectType

  • iPathName := iPathName

  • iGuidIdentifier := iGuidIdentifier

  • iPartitionID := iPartitionID

  • iNumberOfProperties := iNumberOfProperties

  • iPropertyID := iPropertyID

  • iPropertyValue := iPropertyValue

  • iSeqNumber := iSeqNumber

<130> Section 3.1.6.5: For Windows NT and Windows 2000 when operating in MSMQ mixed-mode, the server raises the Propagate Directory Change (archived [MC-MQDSRP] protocol section 3.1.7.1.2) event with the following arguments:

  • iOperation := 2

  • iObjectType := iObjectType

  • iPathName := iPathName

  • iGuidIdentifier := iGuidIdentifier

  • iPartitionID := iPartitionID

  • iNumberOfProperties := 0

  • iPropertyID := an empty array

  • iPropertyValue := an empty array

  • iSeqNumber := iSeqNumber

<131> Section 3.1.6.7: Windows NT Server performs the following actions instead and then returns the call to the client:

  • Populate a directory object array, referred to as resultCollection, according to newStateObject.ObjectType as follows:

    ObjectType

    Object Array

    MQDS_QUEUE

    Elements in the QueueCollection ADM element that satisfy iRestriction

    MQDS_MACHINE

    Elements in the QueueManagerCollection ADM element that satisfy iRestriction

    MQDS_SITE

    Elements in the SiteCollection ADM element that satisfy iRestriction

    MQDS_ENTERPRISE

    The Enterprise ADM element if it satisfies iRestriction

    MQDS_USER

    Elements in the UserCollection ADM element that satisfy iRestriction

    MQDS_ROUTINGLINK

    Elements in the RoutingLinkCollection ADM element that satisfy iRestriction

    MQDS_CN

    Elements in the ConnectedNetworkCollection ADM element that satisfy iRestriction

  • Create a collection of key-value pairs and assign it to newStateObject.LookupState. Add the following items to the collection:

    • ("objects", resultCollection).

    • ("index", 0).

  • Set rLookupDescriptor to newStateObject.

  • Set rStatus to MQ_OK.

<132> Section 3.1.6.8: Windows NT Server performs the following actions instead:

  • If iLookupDescriptor.LookupState["index"] is equal to the size of iLookupDescriptor.LookupState["objects"], set rStatus to MQ_OK (0x00000000), set rPropertyValue to an empty array, and take no further action.

  • Let nextObject be the object in iLookupDescriptor.LookupState["objects"] located at iLookupDescriptor.LookupState["index"].

  • Let propValues be an array of PROPVARIANT ([MS-MQMQ] section 2.2.13.2) structures with as many elements as the count of property identifiers in iLookupDescriptor.PropertyList. Populate propValues with the attributes of nextObject using the mapping defined in section 3.1.4.21.8.1.

  • Append propValues to rPropertyValue.

  • Increment iLookupDescriptor.LookupState["index"] by one.

  • Set rStatus to MQ_OK (0x00000000).

<133> Section 3.1.6.9: Windows NT Server skips this event.

<134> Section 3.1.6.10: Windows NT Server performs the following actions:

  • If iOperation is not 0x00 or 0x01, return an error.

  • If iPartitionID is not GUID_NULL, perform the following steps:

    • For each Queue ADM element instance in the QueueCollection ADM element where Queue.PartitionIdentifier equals iPartitionID, perform the following steps:

      • If iOperation is 0x00, set the Queue.SequenceNumber attribute to an eight-byte array of UCHARs with all bytes set to 0x00.

      • Else if iOperation is 0x01, remove the Queue ADM element instance from the QueueCollection ADM element.

    • For each QueueManager ADM element instance in the QueueManagerCollection ADM element where QueueManager.PartitionIdentifier equals iPartitionID, perform the following steps:

      • If iOperation is 0x00, set the QueueManager.SequenceNumber attribute to an eight-byte array of UCHARs with all bytes set to 0x00.

      • Else if iOperation is 0x01, remove the QueueManager ADM element instance from the QueueManagerCollection ADM element.

  • Else if iPartitionID is GUID_NULL, perform the following steps:

    • For each User ADM element instance in the UserCollection ADM element, perform the following steps:

      • If iOperation is 0x00, set the User.SequenceNumber attribute to an eight-byte array of UCHARs with all bytes set to 0x00.

      • Else if iOperation is 0x01, remove the User ADM element instance from the UserCollection ADM element.

    • For each Site ADM element instance in the SiteCollection ADM element, perform the following steps:

      • If iOperation is 0x00, set the Site.SequenceNumber attribute to an eight-byte array of UCHARs with all bytes set to 0x00.

      • Else if iOperation is 0x01, remove the Site ADM element instance from the SiteCollection ADM element.

    • For each RoutingLink ADM element instance in the RoutingLinkCollection ADM element, perform the following steps:

      • If iOperation is 0x00, set the RoutingLink.SequenceNumber attribute to an eight-byte array of UCHARs with all bytes set to 0x00.

      • Else if iOperation is 0x01, remove the RoutingLink ADM element instance from the RoutingLinkCollection ADM element.

    • For each ConnectedNetwork ADM element instance in the ConnectedNetworkCollection ADM element, perform the following steps:

      • If iOperation is 0x00, set the ConnectedNetwork.SequenceNumber attribute to an eight-byte array of UCHARs with all bytes set to 0x00.

      • Else if iOperation is 0x01, remove the ConnectedNetwork ADM element instance from the ConnectedNetworkCollection ADM element.

    • If iOperation is 0x00, set the SequenceNumber attribute of the Enterprise ADM element to an eight-byte array of UCHARs with all bytes set to 0x00.

    • Else if iOperation is 0x01, delete the Enterprise ADM element.

  • Return MQ_OK (0x00000000).

<135> Section 3.1.6.11: Windows NT Server performs the following actions:

  • If iObject is a QueueManager ADM element instance, add iObject to the QueueManagerCollection ADM element.

  • If iObject is a Queue ADM element instance, add iObject to the QueueCollection ADM element.

  • If iObject is a User ADM element instance, add iObject to the UserCollection ADM element.

  • If iObject is a Site ADM element instance, add iObject to the SiteCollection ADM element.

  • If iObject is a RoutingLink ADM element instance, add iObject to the RoutingLinkCollection ADM element.

  • If iObject is a ConnectedNetwork ADM element instance, add iObject to the ConnectedNetworkCollection ADM element.

  • Set rStatus to 0x00000000.

<136> Section 3.1.6.12: Windows NT Server performs the following actions:

  • If iObjectType is MQDS_QUEUE:

    • Locate the Queue ADM element instance in the QueueCollection ADM element where:

      • Queue.PathName equals iPathName if iPathName is not NULL, or

      • Queue.Identifier equals iGuid if iGuid is not NULL.

    • If the Queue ADM element instance is found, assign it to rObject and set rStatus to 0x00000000; otherwise, take no further action and set rStatus to a failure HRESULT.

  • Else If iObjectType is MQDS_MACHINE:

    • Locate the QueueManager ADM element instance in the QueueManagerCollection ADM element where:

      • QueueManager.FullPath equals iPathName if iPathName is not NULL, or

      • QueueManager.Identifier equals iGuid if iGuid is not NULL.

    • If the QueueManager ADM element instance is found, assign it to rObject and set rStatus to 0x00000000; otherwise, take no further action and set rStatus to a failure HRESULT.

  • Else If iObjectType is MQDS_SITE:

    • Locate the Site ADM element instance in the SiteCollection ADM element where:

      • Site.FullPath equals iPathName if iPathName is not NULL, or

      • Site.Identifier equals iGuid if iGuid is not NULL.

    • If the Site ADM element instance is found, assign it to rObject and set rStatus to 0x00000000; otherwise, take no further action and set rStatus to a failure HRESULT.

  • Else If iObjectType is MQDS_ROUTINGLINK:

    • Locate the RoutingLink ADM element instance in the RoutingLinkCollection ADM element where:

      • RoutingLink.FullPath equals iPathName if iPathName is not NULL, or

      • RoutingLink.Identifier equals iGuid if iGuid is not NULL.

    • If the RoutingLink ADM element instance is found, assign it to rObject and set rStatus to 0x00000000; otherwise take no further action and set rStatus to a failure HRESULT.

  • Else If iObjectType is MQDS_ENTERPRISE:

    • If iPathName equals Enterprise.Name, set rObject to the Enterprise ADM element and set rStatus to 0x00000000; otherwise, take no further action and set rStatus to a failure HRESULT.

  • Else If iObjectType is MQDS_CN:

    • Locate the ConnectedNetwork ADM element instance in the ConnectedNetworkCollection ADM element where:

      • ConnectedNetwork.Name equals iPathName if iPathName is not NULL, or

      • ConnectedNetwork.Identifier equals iGuid if iGuid is not NULL.

    • If the ConnectedNetwork ADM element instance is found, assign it to rObject and set rStatus to 0x00000000; otherwise, take no further action and set rStatus to a failure HRESULT.

  • Else:

    • Set rStatus to a failure HRESULT and take no further action.

<137> Section 3.1.6.13: Windows NT Server performs the following actions:

  • If iObjectType equals MQDS_QUEUE:

    • Locate the Queue ADM element instance in the QueueCollection ADM element where Queue.PathName equals iPathName or Queue.Identifier equals iGuid.

    • If no entry is located, take no further action and set rStatus to a failure HRESULT.

    • Else, remove the located entry from QueueCollection.

    • If the Computer portion of the Queue.PathName (as described in [MS-MQMQ] section 2.1.1) is different from the LocalQueueManager.ComputerName:

      • Generate a Send Change Notification event as specified in [MS-MQCN] section 3.3.4.1 with the following arguments:

        • iOperation := QueueDeletion

        • iDirectoryObject := the deleted Queue ADM element instance

  • Else if iObjectType equals MQDS_MACHINE:

    • Locate the QueueManager ADM element instance in the QueueManagerCollection ADM element where QueueManager.FullPath equals iPathName or QueueManager.Identifier equals iGuid.

    • If no entry is resolved, take no further action and set rStatus to a failure HRESULT.

    • Else, remove the located entry from the QueueManagerCollection ADM element.

  • Else if iObjectType equals MQDS_SITE:

    • Locate the Site ADM element instance in the SiteCollection ADM element where Site.FullPath equals iPathName or Site.Identifier equals iGuid.

    • If no entry is resolved, take no further action and set rStatus to a failure HRESULT.

    • Else, remove the located entry from the SiteCollection ADM element.

  • Else if iObjectType equals MQDS_CN:

    • Locate the ConnectedNetwork ADM element instance in the ConnectedNetworkCollection ADM element where ConnectedNetwork.Name equals iPathName or ConnectedNetwork.Identifier equals iGuid.

    • If no entry is resolved, take no further action and set rStatus to a failure HRESULT.

    • Else, remove the located entry from the ConnectedNetworkCollection ADM element.

  • Else if iObjectType equals MQDS_ENTERPRISE:

    • Locate the Enterprise ADM element instance where Enterprise.Name equals iPathName or Enterprise.Identifier equals iGuid.

    • If no entry is resolved, take no further action and set rStatus to a failure HRESULT.

    • Else, delete the located entry.

  • Else if iObjectType equals MQDS_USER:

    • If iPathName is not NULL:

      • Take no further action and set rStatus to a failure HRESULT.

    • Else if iGuid is not NULL:

      • Locate the User ADM element instance in the UserCollection ADM element where User.CertificateDigestList equals iGuid.

      • If no entry is resolved, take no further action and set rStatus to a failure HRESULT.

      • Else, remove the located entry from the UserCollection ADM element.

  • Else if iObjectType equals MQDS_ROUTINGLINK:

    • Locate the RoutingLink ADM element instance in the RoutingLinkCollection ADM element where RoutingLink.FullPath equals iPathName.

    • If no entry is resolved, take no further action and set rStatus to a failure HRESULT.

    • Else, remove the located entry from the RoutingLinkCollection ADM element.

  • Set rStatus to 0x00000000.

<138> Section 3.1.6.13: The event is generated only for Windows NT and Windows 2000.

<139> Section 3.1.6.14: Windows NT Server performs the following actions:

  • If iObjectType is MQDS_QUEUE:

    • Locate the Queue ADM element instance in the QueueCollection ADM element where Queue.PathName equals pwcsPathName.

    • If found, assign the Queue ADM element instance to rObject; otherwise, set rStatus to an error HRESULT, and take no further action.

  • Else If iObjectType is MQDS_MACHINE:

    • Locate the QueueManager ADM element instance in the QueueManagerCollection ADM element where QueueManager.FullPath equals pwcsPathName.

    • If found, assign the object to rObject; otherwise, set rStatus to an error HRESULT, and take no further action.

  • Else If iObjectType is MQDS_SITE:

    • Locate the Site ADM element instance in the SiteCollection ADM element where Site.FullPath equals pwcsPathName.

    • If found, assign the object to rObject; otherwise, set rStatus to an error HRESULT, and take no further action.

  • Else If iObjectType is MQDS_CN:

    • Locate the ConnectedNetwork ADM element instance in the ConnectedNetworkCollection ADM element where ConnectedNetwork.Name equals pwcsPathName.

    • If found, assign the object to rObject; otherwise, set rStatus to an error HRESULT, and take no further action.

  • Else If iObjectType is MQDS_ENTERPRISE:

    • Verify that Enterprise.Name equals pwcsPathName. If they match, set rObject to the Enterprise ADM element instance; otherwise, take no further action and set rStatus to an error HRESULT.

  • Else:

    • Set rStatus to a failure HRESULT, and take no further action.

  • Set rStatus to 0x00000000.

<140> Section 3.1.6.15: Windows NT Server sets rStatus to MQ_OK and returns immediately.

<141> Section 3.2.1.3: Windows clients store their site identifiers in registry key HKLM\Software\Microsoft\MSMQ\Parameters\MachineCache\SiteId.

<142> Section 3.2.1.4: Only Windows NT and Windows 2000 clients maintain a list of known directory service servers. An initial directory service server is provided by the user during the setup process and is stored as both the current server in the CurrentServer (section 3.2.1.7) data element and as a list of one known server in the DirectoryServiceServersCollection (section 3.2.1.4) data element.

<143> Section 3.2.1.4: Only Windows NT and Windows 2000 clients store the list of known directory service servers in registry key HKLM\Software\Microsoft\MSMQ\Parameters\MachineCache\MQISServer, and store the current server in registry key HKLM\Software\Microsoft\MSMQ\Parameters\MachineCache\CurrentMQISServer.

<144> Section 3.2.3: Only Windows NT and Windows 2000 protocol clients call the S_DSGetServerPort method.

<145> Section 3.2.4: Windows NT and Windows 2000 do not specify any NDR consistency checks. Windows XP and Windows Server 2003 specify NDR consistency checks at target level 5.0. Windows Vista and Windows Server 2008 specify NDR consistency checks at target level 6.0

<146> Section 3.2.4.1: Windows NT Server, Windows 2000, Windows XP, and Windows Server 2003 support the S_DSQMSetMachinePropertiesSignProc callback method. Windows Vista and Windows Server 2008 return MQ_ERROR_NOT_SUPPORTED (0xC00E03EB).

<147> Section 3.2.4.2: Windows NT Server, Windows 2000, Windows XP, and Windows Server 2003 support the S_DSQMGetObjectSecurityChallengeResponceProc callback method. Windows Vista and Windows Server 2008 return MQ_ERROR_NOT_SUPPORTED (0xC00E03EB).

<148> Section 3.2.6.8: Only Windows NT and Windows 2000 clients perform this event during initialization.

<149> Section 3.2.6.8: Windows NT and Windows 2000 clients report the failure by writing an event in the event viewer so that manual update to the DirectoryServiceServersCollection (section 3.2.1.4) and CurrentServer (section 3.2.1.7) data elements can be performed if required.

<150> Section 3.3.1.1: The object identifier of the site is not required if the owner is Active Directory.

<151> Section 3.3.3: Windows support both dynamic and static endpoints. The server uses registry key HKLM\SOFTWARE\Microsoft\MSMQ\Parameters\UseDSPredefinedEP to determine whether to use the predefined endpoint instead of a dynamic endpoint. Setting this key to a nonzero DWORD value causes the predefined endpoint to be used. The endpoint port number defaults to 2879 but can be configured by setting registry key HKLM\SOFTWARE\Microsoft\MSMQ\Parameters\MsmqDSRpcIpPort to a string value equal to the preferred endpoint port number.

<152> Section 3.3.4: Windows NT and Windows 2000 do not specify any NDR consistency checks. Windows XP and Windows Server 2003 specify NDR consistency checks at target level 5.0. Windows Vista and Windows Server 2008 specify NDR consistency checks at target level 6.0

<153> Section 3.3.4: Gaps in the opnum numbering sequence apply to Windows as follows.

Opnum

Description

7

This method is deprecated and not used.

<154> Section 3.3.4.1: For Windows 2000 and Windows XP, the server returns an error if a NULL value is specified for pwcsPathName.

<155> Section 3.3.4.2: If the cp parameter is 0x00000000, Windows NT returns MQ_OK. If the cp parameter is 0x00000000, Windows 2000 returns MQ_ERROR_INVALID_PARAMETER (0xC00E0006). If the cp parameter is 0x00000000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008 return an error from the RPC runtime.

<156> Section 3.3.4.3: If the cp parameter is 0x00000000, Windows NT returns MQ_OK. If the cp parameter is 0x00000000, Windows 2000 returns MQ_ERROR_INVALID_PARAMETER (0xC00E0006). If the cp parameter is 0x00000000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008 return an error from the RPC runtime.

<157> Section 3.3.4.4: Windows assume that pwcsPathName specifies a queue name if it contains a backslash "\"; otherwise, pwcsPathName specifies a machine name.

<158> Section 3.3.4.4: If the named object is a queue and the queue is owned by a Windows NT PSC, Windows 2000 and Windows XP return MQ_INFORMATION_QUEUE_OWNED_BY_NT4_PSC (0x400E03EB). If the named object is a machine, and the machine is owned by a Windows NT PSC, Windows 2000 and Windows XP return MQ_INFORMATION_MACHINE_OWNED_BY_NT4_PSC (0x400E03EB).

<159> Section 3.3.4.4: Windows assume that pwcsPathName specifies a queue name if it contains a backslash "\"; otherwise, pwcsPathName specifies a machine name.

<160> Section 3.3.4.4: The object identifier of the site is not required if the owner is the Active Directory.

<161> Section 3.3.4.5: For Windows 2000 and Windows XP, the server notifies the Primary Site Controller if the queue is owned by the Primary Site Controller. Windows Server 2003, Windows Vista, and Windows Server 2008 do not notify the Primary Site Controller.

<162> Section 3.3.4.5: For Windows 2000 and Windows XP, the server notifies the Primary Site Controller if the queue is owned by the Primary Site Controller. Windows Server 2003, Windows Vista, and Windows Server 2008 do not notify the Primary Site Controller.