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.

The terms "earlier" and "later", when used with a product version, refer to either all preceding versions or all subsequent versions, respectively. The term "through" refers to the inclusive range of versions. Applicable Microsoft products are listed chronologically in this section.

Windows Client

  • Windows NT Workstation operating system

  • Windows 2000 Professional operating system

  • Windows XP operating system

  • Windows Vista operating system

  • Windows 7 operating system

  • Windows 8 operating system

  • Windows 8.1 operating system

  • Windows 10 operating system

  • Windows 11 operating system

Windows Server

  • Windows NT Server operating system

  • Windows 2000 Server operating system

  • Windows Server 2003 operating system

  • Windows Server 2008 operating system

  • Windows Server 2008 R2 operating system

  • Windows Server 2012 operating system

  • Windows Server 2012 R2 operating system

  • Windows Server 2016 operating system

  • Windows Server operating system

  • Windows Server 2019 operating system

  • Windows Server 2022 operating system

  • Windows Server 2025 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.6: Only Windows NT operating system, Windows 2000 operating system, Windows XP 32-bit, and Windows Server 2003 32-bit on domain-joined machines can be configured as clients of a supporting server. Servers running Windows NT and Windows 2000 act as supporting servers. By default, Windows Server 2003, Windows Server 2008 and Windows Server 2008 R2 operating system do not act as supporting servers, although an administrator can enable support when the MSMQ service is integrated with a directory service.

<2> Section 2.1: The ncacn_spx protocol sequence is supported only by Windows NT and Windows 2000 and is supported only if TCP/IP is unavailable. Support for IPX and the ncacn_spx protocol sequence is deprecated on Windows XP and later client versions, and on Windows Server 2003 and later server versions. The ncacn_ip_tcp protocol sequence is supported when TCP/IP is available.

<3> Section 2.2.3.1: All Windows clients produce new XACTUOW values by calling the Windows RPC function UuidCreate.

<4> Section 2.2.3.2: All Windows implementations of qmcomm and qmcomm2 Server ignore this value. If this field is not set to FALSE, clients on Windows NT, Windows 2000, Windows XP, and Windows Server 2003 create a new thread that is used to perform the steps described in Receiving a Message (section 3.2.4.12).

<5> Section 2.2.3.2: With MSMQ version 2 and higher, the ppSignature member contains an MSMQ 1.0 digital signature followed by an MSMQ 2.0 digital signature.

<6> Section 2.2.3.2: The only value supported by Windows is FALCON_PACKET_VERSION (0x00000010).

<7> Section 2.3: For Windows NT and Windows 2000, this protocol uses the Message Queuing (MSMQ): Directory Service Protocol [MS-MQDS].

<8> Section 2.3: For the Message Queuing (MSMQ): Directory Service Protocol [MS-MQDS], the Directory Service schema elements are described in [MS-MQDS] sections 2.2.10 and 3.1.4.21.1 through 3.1.4.21.4.

<9> Section 3.1.4: Windows 2000 and Windows Server 2003 use target level 5.0. Windows NT disables strict NDR data consistency checks.

<10> Section 3.1.4: Opnums reserved for local use apply to Windows as follows:

Opnum

Description

0

Used only locally by Windows, never remotely.

5

Not used by Windows.

13

Used only locally by Windows, never remotely.

21

Not used by Windows.

24

Not used by Windows.

25

Not used by Windows.

29

Used only locally by Windows, never remotely.

30

Used only locally by Windows, never remotely.

32

Used only locally by Windows, never remotely.

33

Used only locally by Windows, never remotely.

34

Used only locally by Windows, never remotely.

<11> Section 3.1.4.1: Only Windows NT and Windows 2000 servers implement this method. The remote cursor creation process was revised for Windows Server 2003, Windows Server 2008, and Windows Server 2008 R2.

For Windows NT and Windows 2000 servers, the method rpc_ACCreateCursorEx returns MQ_INFORMATION_REMOTE_OPERATION (0x400e03e8) to the client to indicate that a different queue manager is required to create the cursor. Upon receiving this return code, a client can proceed with cursor creation by calling R_QMGetRemoteQueueName to determine which queue manager to contact. For Windows Server 2003, Windows Server 2008, and Windows Server 2008 R2, this process was revised such that rpc_ACCreateCursorEx contacts the remote queue on behalf of the client, eliminating the need for R_QMGetRemoteQueueName to exist. If invoked, R_QMGetRemoteQueueName on Windows Server 2003 immediately raises the exception MQ_ERROR_ILLEGAL_OPERATION (0xc00e0064); R_QMGetRemoteQueueName on Windows Server 2008 and Windows Server 2008 R2 returns RPC_S_ACCESS_DENIED (0x00000005).

<12> Section 3.1.4.1: For Windows NT and Windows 2000 servers, the method rpc_ACCreateCursorEx returns MQ_INFORMATION_REMOTE_OPERATION (0x400e03e8) to the client to indicate that a different queue manager is required to create the cursor. Upon receiving this return code, a client can proceed with cursor creation by calling R_QMGetRemoteQueueName to determine which queue manager to contact. For Windows Server 2003, Windows Server 2008, and Windows Server 2008 R2, this process was revised such that rpc_ACCreateCursorEx contacts the remote queue on behalf of the client, which eliminates the need for R_QMGetRemoteQueueName to exist. If invoked, R_QMGetRemoteQueueName on Windows Server 2003 immediately raises the exception MQ_ERROR_ILLEGAL_OPERATION (0xc00e0064); R_QMGetRemoteQueueName on Windows Server 2008 and Windows Server 2008 R2 returns RPC_S_ACCESS_DENIED (0x00000005).

<13> Section 3.1.4.1: For Windows NT and Windows 2000 servers, the method rpc_ACCreateCursorEx returns MQ_INFORMATION_REMOTE_OPERATION (0x400e03e8) to the client to indicate that a different queue manager is required to create the cursor. Upon receiving this return code, a client can proceed with cursor creation by calling R_QMGetRemoteQueueName to determine which queue manager to contact. For Windows Server 2003, Windows Server 2008, and Windows Server 2008 R2, this process was revised such that rpc_ACCreateCursorEx contacts the remote queue on behalf of the client, eliminating the need for R_QMGetRemoteQueueName to exist. If invoked, R_QMGetRemoteQueueName on Windows Server 2003 immediately raises the exception MQ_ERROR_ILLEGAL_OPERATION (0xc00e0064); R_QMGetRemoteQueueName on Windows Server 2008 and Windows Server 2008 R2 returns RPC_S_ACCESS_DENIED (0x00000005).

<14> Section 3.1.4.1: For Windows NT and Windows 2000 servers, the method rpc_ACCreateCursorEx returns MQ_INFORMATION_REMOTE_OPERATION (0x400e03e8) to the client to indicate that a different queue manager is required to create the cursor. Upon receiving this return code, a client can proceed with cursor creation by calling R_QMGetRemoteQueueName to determine which queue manager to contact. For Windows Server 2003, Windows Server 2008, and Windows Server 2008 R2, this process was revised such that rpc_ACCreateCursorEx contacts the remote queue on behalf of the client, eliminating the need for R_QMGetRemoteQueueName to exist. If invoked, R_QMGetRemoteQueueName on Windows Server 2003 immediately raises the exception MQ_ERROR_ILLEGAL_OPERATION (0xc00e0064); R_QMGetRemoteQueueName on Windows Server 2008 and Windows Server 2008 R2 returns RPC_S_ACCESS_DENIED (0x00000005).

<15> Section 3.1.4.2: A Windows client passes its Windows process ID, as returned by the Windows SDK function GetCurrentProcessId. Servers ignore the value of this parameter. Therefore, clients can pass 0x00000000.

<16> Section 3.1.4.2: Clients identify themselves to the server using a GUID generated at install time, and never subsequently modified.

<17> Section 3.1.4.2: These parameters are used to implement client access licensing restrictions. Such restrictions are enforced only by servers running Windows NT, Windows 2000, and Windows Server 2003. The parameters are otherwise ignored.

<18> Section 3.1.4.2: Servers running Windows NT, Windows 2000, and Windows Server 2003 can limit the number of unique callers. If the limit is exceeded, the server can take no action and return MQ_ERROR_DEPEND_WKS_LICENSE_OVERFLOW (0xc00e0067).

<19> Section 3.1.4.2: These parameters are used to implement client access licensing restrictions. Such restrictions are enforced only by servers running Windows NT, Windows 2000, and Windows Server 2003. The parameters are otherwise ignored.

<20> Section 3.1.4.2: These parameters are used to implement client access licensing restrictions. Such restrictions are enforced only by servers running Windows NT, Windows 2000, and Windows Server 2003. The parameters are otherwise ignored.

<21> Section 3.1.4.2: A non-Microsoft OS.

<22> Section 3.1.4.2: Any edition of Windows 95 operating system, Windows 98 operating system, or Windows Millennium Edition operating system.

<23> Section 3.1.4.2: All Windows Client operating system versions listed in the applicability lists.

<24> Section 3.1.4.2: All applicable Windows Server releases, plus Windows client versions, Windows Vista, and later.

<25> Section 3.1.4.2: Any premium, advanced, or data center edition of an NT-class server operating system.

<26> Section 3.1.4.2: Windows applications typically invoke R_QMOpenRemoteQueue indirectly via the Windows API function MQOpenQueue. The Windows API documentation for MQOpenQueue includes the following error codes. For their descriptions, refer to [MS-MQMQ] section 2.4 or to [MSDN-MQEIC] for those not described in [MS-MQMQ].

Name

Value

MQ_ERROR_ACCESS_DENIED

0xc00E0025

MQ_ERROR_ILLEGAL_FORMATNAME

0xC00E001E

MQ_ERROR_NO_DS

0xC00E0013

MQ_ERROR_QUEUE_NOT_FOUND

0xC00E0003

MQ_ERROR_REMOTE_MACHINE_NOT_AVAILABLE

0xC00E0069

MQ_ERROR_SERVICE_NOT_AVAILABLE

0xc00E000B

MQ_ERROR_SHARING_VIOLATION

0xC00E0009

MQ_ERROR_UNSUPPORTED_ACCESS_MODE

0xC00E0045

MQ_ERROR_UNSUPPORTED_FORMATNAME_OPERATION

0xC00E0020

LDAP_BUSY

0x8007200E

MQ_ERROR_INVALID_PARAMETER

0xC00E0006

<27> Section 3.1.4.2: Windows NT and Windows 2000 support these R_QMOpenRemoteQueue out-parameter assignments.

<28> Section 3.1.4.2: These R_QMOpenRemoteQueue out-parameter assignments are supported on Windows Server 2003 and later server versions, and on Windows XP and later client versions.

<29> Section 3.1.4.4: Windows clients pass a non-NULL pointer to a zeroed-out CACTransferBufferV1 structure when calling R_QMCreateRemoteCursor. The server ignores the CACTransferBufferV1 pointer.

<30> Section 3.1.4.5: Windows applications typically invoke R_QMCreateObjectInternal indirectly via the Windows API function MQCreateQueue. The Windows API documentation for MQCreateQueue includes the following error codes. For descriptions of the following error codes, see [MS-MQMQ] section 2.4. For error codes not described in [MS-MQMQ], refer to [MSDN-MQEIC].

Name

Value

MQ_ERROR_ACCESS_DENIED

0xc00e0025

MQ_ERROR_ILLEGAL_PROPERTY_VALUE

0xc00e0018

MQ_ERROR_ILLEGAL_QUEUE_PATHNAME

0xc00e0014

MQ_ERROR_ILLEGAL_SECURITY_DESCRIPTOR

0xc00e0021

MQ_ERROR_INSUFFICIENT_PROPERTIES

0xc00e003f

MQ_ERROR_INVALID_OWNER

0xc00e0044

MQ_ERROR_NO_DS

0xc00e0013

MQ_ERROR_PROPERTY

0xc00e0002

MQ_ERROR_PROPERTY_NOTALLOWED

0xc00e003e

MQ_ERROR_QUEUE_EXISTS

0xc00e0005

MQ_ERROR_SERVICE_NOT_AVAILABLE

0xc00e000b

MQ_ERROR_WRITE_NOT_ALLOWED

0xc00e0065

MQ_INFORMATION_FORMATNAME_BUFFER_TOO_SMALL

0x400e0009

MQ_INFORMATION_PROPERTY

0x400e0001

LDAP_BUSY

0x8007200e

MQ_ERROR_INVALID_PARAMETER

0xC00E0006

<31> Section 3.1.4.5: Windows components that invoke R_QMCreateObjectInternal indirectly via the Windows API function MQCreateQueue test for the following return value. For a description of the following error code, see [MS-MQMQ] section 2.4.

Name

Value

MQ_ERROR_FORMATNAME_BUFFER_TOO_SMALL

0xc00e001f

<32> Section 3.1.4.6: Windows applications typically invoke R_QMSetObjectSecurityInternal indirectly via the Windows API function MQSetQueueSecurity. The Windows API documentation for MQSetQueueSecurity includes the following error codes. For descriptions of the following error codes, see [MS-MQMQ] section 2.4. For error codes not described in [MS-MQMQ], refer to [MSDN-MQEIC].

Name

Value

MQ_ERROR_ACCESS_DENIED

0xc00e0025

MQ_ERROR_ILLEGAL_FORMATNAME

0xc00e001e

MQ_ERROR_NO_DS

0xc00e0013

MQ_ERROR_PRIVILEGE_NOT_HELD

0xc00e0026

MQ_ERROR_SERVICE_NOT_AVAILABLE

0xc00e000b

MQ_ERROR_UNSUPPORTED_FORMATNAME_OPERATION

0xc00e0020

MQ_INFORMATION_OWNER_IGNORED

0x400e000b

LDAP_BUSY

0x8007200e

<33> Section 3.1.4.7: Windows applications typically invoke R_QMGetObjectSecurityInternal indirectly via the Windows API function MQGetQueueSecurity. The Windows API documentation for MQGetQueueSecurity includes the following error codes. For descriptions of the following error codes, see [MS-MQMQ] section 2.4. For error codes not described in [MS-MQMQ], refer to [MSDN-MQEIC].

Name

Value

MQ_ERROR_ACCESS_DENIED

0xc00e0025

MQ_ERROR_ILLEGAL_FORMATNAME

0xc00e001e

MQ_ERROR_NO_DS

0xc00e0013

MQ_ERROR_PRIVILEGE_NOT_HELD

0xc00e0026

MQ_ERROR_SECURITY_DESCRIPTOR_TOO_SMALL

0xc00e0023

MQ_ERROR_UNSUPPORTED_FORMATNAME_OPERATION

0xc00e0020

LDAP_BUSY

0x8007200e

<34> Section 3.1.4.8: Windows applications typically invoke R_QMDeleteObject indirectly via the Windows API function MQDeleteQueue. The Windows API documentation for MQDeleteQueue includes the following error codes. For descriptions of the following error codes, see [MS-MQMQ] section 2.4. For error codes not described in [MS-MQMQ], refer to [MSDN-MQEIC].

Name

Value

MQ_ERROR_ACCESS_DENIED

0xc00e0025

MQ_ERROR_ILLEGAL_FORMATNAME

0xc00e001e

MQ_ERROR_NO_DS

0xc00e0013

MQ_ERROR_SERVICE_NOT_AVAILABLE

0xc00e000b

MQ_ERROR_UNSUPPORTED_FORMATNAME_OPERATION

0xc00e0020

MQ_ERROR_WRITE_NOT_ALLOWED

0xc00e0065

LDAP_BUSY

0x8007200e

<35> Section 3.1.4.8: Windows components that invoke R_QMDeleteObject indirectly via the Windows API function MQDeleteQueue test for the following return value. For a description of the following error code, see [MS-MQMQ] section 2.4.

Name

Value

MQ_ERROR_QUEUE_DELETED

0xc00e005a

<36> Section 3.1.4.9: Windows NT, Windows 2000, Windows Server 2003, and Windows Server 2008 return MQ_ERROR_ILLEGAL_PROPERTY_VT (0xc00e0019).

<37> Section 3.1.4.9: Windows applications typically invoke R_QMGetObjectProperties indirectly via the Windows API function MQGetQueueProperties. The Windows API documentation for MQGetQueueProperties includes the following error codes. For descriptions of the following error codes, see [MS-MQMQ] section 2.4. For error codes not described in [MS-MQMQ], refer to [MSDN-MQEIC].

Name

Value

MQ_ERROR_ACCESS_DENIED

0xc00e0025

MQ_ERROR_ILLEGAL_FORMATNAME

0xc00e001e

 MQ_ERROR_ILLEGAL_PROPERTY_VT

0xc00e0019

MQ_ERROR_NO_DS

0xc00e0013

MQ_ERROR_SERVICE_NOT_AVAILABLE

0xc00e000b

MQ_ERROR_UNSUPPORTED_FORMATNAME_OPERATION

0xc00e0020

MQ_INFORMATION_DUPLICATE_PROPERTY

0x400e0005

MQ_INFORMATION_PROPERTY

0x400e0001

MQ_INFORMATION_UNSUPPORTED_PROPERTY

0x400e0004

LDAP_BUSY

0x8007200e

<38> Section 3.1.4.9: Windows components that invoke R_QMGetObjectProperties indirectly via the Windows API function MQGetQueueProperties test for the following return value. For a description of the following error code, see [MS-MQMQ] section 2.4.

Name

Value

MQ_ERROR

0xc00e0001

<39> Section 3.1.4.10: Windows NT, Windows 2000, Windows Server 2003, and Windows Server 2008 return MQ_ERROR_ILLEGAL_PROPERTY_VT (0xc00e0019).

<40> Section 3.1.4.10: Windows applications typically invoke R_QMSetObjectProperties indirectly via the Windows API function MQSetQueueProperties. The Windows API documentation for MQSetQueueProperties includes the following error codes. For descriptions of the following error codes, see [MS-MQMQ] section 2.4. For error codes not described in [MS-MQMQ], refer to [MSDN-MQEIC].

Name

Value

MQ_ERROR_ACCESS_DENIED

0xc00e0025

MQ_ERROR_ILLEGAL_FORMATNAME

0xc00e001e

MQ_ERROR_ILLEGAL_PROPERTY_VALUE

0xc00e0018

MQ_ERROR_NO_DS

0xc00e0013

MQ_ERROR_PROPERTY

0xc00e0002

MQ_ERROR_SERVICE_NOT_AVAILABLE

0xc00e000b

MQ_ERROR_UNSUPPORTED_FORMATNAME_OPERATION

0xc00e0020

MQ_ERROR_WRITE_NOT_ALLOWED

0xc00e0065

MQ_INFORMATION_PROPERTY

0x400e0001

LDAP_BUSY

0x8007200e

<41> Section 3.1.4.11: Windows applications typically invoke R_QMObjectPathToObjectFormat indirectly via the Windows API function MQPathNameToFormatName. The Windows API documentation for MQPathNameToFormatName includes the following error codes. For descriptions of the following error codes, see [MS-MQMQ] section 2.4. For error codes not described in [MS-MQMQ], refer to [MSDN-MQEIC].

Name

Value

MQ_ERROR_FORMATNAME_BUFFER_TOO_SMALL

0xc00e001f

MQ_ERROR_ILLEGAL_QUEUE_PATHNAME

0xc00e0014

MQ_ERROR_NO_DS

0xc00e0013

MQ_ERROR_QUEUE_NOT_FOUND

0xc00e0003

MQ_ERROR_SERVICE_NOT_AVAILABLE

0xc00e000b

LDAP_BUSY

0x8007200e

<42> Section 3.1.4.11: Windows components that invoke R_QMObjectPathToObjectFormat indirectly via the Windows API function MQPathNameToFormatName test for the following return value. For a description of the following error code, see [MS-MQMQ] section 2.4.

Name

Value

MQ_ERROR_UNSUPPORTED_OPERATION

0xc00e006a

<43> Section 3.1.4.13: Windows components that invoke R_QMEnlistTransaction indirectly via the Windows API function MQBeginTransaction test for the following return value. For a description of the following error code, see [MS-MQMQ] section 2.4.

Name

Value

MQ_ERROR_INSUFFICIENT_RESOURCES

0xC00E0027

<44> Section 3.1.4.14: All Windows clients produce new XACTUOW values by calling the Windows RPC function UuidCreate.

<45> Section 3.1.4.17: Clients identify themselves to the server using a GUID generated at install time, and never subsequently modified.

<46> Section 3.1.4.17: These parameters are used to implement client access licensing restrictions. Such restrictions are enforced only by Windows NT, Windows 2000, and Windows Server 2003 servers. The parameters are ignored by Windows Server 2008 and Windows Server 2008 R2.

<47> Section 3.1.4.17: Windows NT, Windows 2000, and Windows Server 2003 servers can limit the number of unique callers. If the limit is exceeded, the server can take no action and can return MQ_ERROR_DEPEND_WKS_LICENSE_OVERFLOW (0xc00e0067).

<48> Section 3.1.4.17: Windows clients obtain this string from the Windows SDK function GetComputerName.

<49> Section 3.1.4.17: Client access licensing restrictions are only enforced by Windows NT, Windows 2000, and Windows Server 2003 supporting servers.

<50> Section 3.1.4.17: Applicable Windows Server releases accept the value 0x00000000 to indicate that the TCP/IP protocol sequence is used when connecting to a remote queue manager for remote read. Windows NT and Windows 2000 servers accept the value 0x00000003 to indicate that the IPX/SPX protocol sequence is used when connecting to a remote queue manager for remote read. Windows XP and later clients and Windows Server 2003 and later servers ignore the parameter.

<51> Section 3.1.4.17: Windows applications typically invoke rpc_QMOpenQueueInternal indirectly via the Windows API function MQOpenQueue. The Windows API documentation for MQOpenQueue includes the following error codes. For descriptions of the following error codes, see [MS-MQMQ] section 2.4. For error codes not described in [MS-MQMQ], refer to [MSDN-MQEIC].

Name

Value

MQ_ERROR_ACCESS_DENIED

0xc00e0025

MQ_ERROR_ILLEGAL_FORMATNAME

0xc00e001e

MQ_ERROR_NO_DS

0xc00e0013

MQ_ERROR_QUEUE_NOT_FOUND

0xc00e0003

MQ_ERROR_REMOTE_MACHINE_NOT_AVAILABLE

0xc00e0069

MQ_ERROR_SERVICE_NOT_AVAILABLE

0xc00e000b

MQ_ERROR_SHARING_VIOLATION

0xc00e0009

MQ_ERROR_UNSUPPORTED_ACCESS_MODE

0xc00e0045

MQ_ERROR_UNSUPPORTED_FORMATNAME_OPERATION

0xc00e0020

<52> Section 3.1.4.18: Windows applications typically invoke rpc_ACCloseHandle indirectly via the Windows API function MQCloseQueue. The Windows API documentation for MQCloseQueue includes the following error code. For a description of the following error code, see [MS-MQMQ] section 2.4.

Name

Value

MQ_ERROR_INVALID_HANDLE

0xc00e0007

<53> Section 3.1.4.18: All applicable Windows Server releases invoke the [MS-MQQP] method RemoteQMCloseQueue using a parallel process, permitting immediate return of control to the client. Note that this introduces the possibility that RemoteQMCloseQueue could fail and that the client would not be informed.

<54> Section 3.1.4.19: Windows applications typically invoke rpc_ACCloseCursor indirectly via the Windows API function MQCloseCursor. The Windows API documentation for MQCloseCursor includes the following error code. For a description of the following error code, see [MS-MQMQ] section 2.4.

Name

Value

MQ_ERROR_INVALID_HANDLE

0xc00e0007

<55> Section 3.1.4.20: This method is implemented only on Windows NT and Windows 2000. Due to revisions to the cursor creation process, the method rpc_ACSetCursorProperties is obsolete on all other Windows versions. If the server implementation does not support rpc_ACSetCursorProperties, it takes no action and returns MQ_ERROR_ILLEGAL_OPERATION (0xc00e0064). Note that this differs from the behavior of other obsolete methods that raise MQ_ERROR_ILLEGAL_OPERATION as an RPC exception.

<56> Section 3.1.4.20: For Windows NT and Windows 2000 servers, the method rpc_ACCreateCursorEx returns MQ_INFORMATION_REMOTE_OPERATION (0x400e03e8) to the client to indicate that a different queue manager is required to create the cursor. Upon receiving this return code, a client can proceed with cursor creation by calling R_QMGetRemoteQueueName (section 3.1.4.1) to determine which queue manager to contact. For Windows Server 2003, Windows Server 2008, Windows Server 2008 R2, and Windows Server 2012, this process was revised such that rpc_ACCreateCursorEx contacts the remote queue on behalf of the client, eliminating the need for R_QMGetRemoteQueueName to exist. If invoked, R_QMGetRemoteQueueName on Windows Server 2003 takes no action and immediately raises the exception MQ_ERROR_ILLEGAL_OPERATION (0xc00e0064); R_QMGetRemoteQueueName on Windows Server 2008, Windows Server 2008 R2, and Windows Server 2012 returns RPC_S_ACCESS_DENIED (0x00000005).

<57> Section 3.1.4.21: Windows applications typically invoke rpc_ACHandleToFormatName indirectly via the Windows API function MQHandleToFormatName. The Windows API documentation for MQHandleToFormatName includes the following error codes. For descriptions of the following error codes, see [MS-MQMQ] section 2.4. For error codes not described in [MS-MQMQ], refer to [MSDN-MQEIC].

Name

Value

MQ_ERROR_FORMATNAME_BUFFER_TOO_SMALL

0xc00e001f

MQ_ERROR_INVALID_HANDLE

0xc00e0007

MQ_ERROR_SERVICE_NOT_AVAILABLE

0xc00e000b

MQ_ERROR_STALE_HANDLE

0xc00e0056

<58> Section 3.1.4.22: Windows applications typically invoke rpc_ACPurgeQueue indirectly via the Windows API function MQPurgeQueue. The Windows API documentation for MQPurgeQueue includes the following error code. For a description of the following error code, see [MS-MQMQ] section 2.4.

Name

Value

MQ_ERROR_INVALID_HANDLE

0xc00e0007

<59> Section 3.1.4.23: For Windows NT and Windows 2000 servers, this value defaults to "7776000" (90 days). For Windows Server 2003 and Windows Server 2008, the default value is "345600" (4 days).

<60> Section 3.1.4.23: Applicable Windows Server releases store and retrieve these values from the registry.

<61> Section 3.1.4.23: Applicable Windows Server releases store and retrieve these values from the registry.

<62> Section 3.1.4.23: This value is supported by Windows 2000 Server operating system and later server versions and by Windows 2000 Professional and later client versions. Windows NT servers return a failure HRESULT.

<63> Section 3.1.4.23: This value is supported by Windows 2000 Server and later server versions and by Windows 2000 Professional and later client versions. Windows NT servers return a failure HRESULT.

<64> Section 3.1.4.23: Applicable Windows Server releases store and retrieve these values from the registry.

<65> Section 3.1.4.24: RPC over SPX is supported only by Windows NT and Windows 2000. This value is not supported by Windows XP or later client versions, or by Windows Server 2003 or later server versions. The server returns 0x00000000 to indicate failure.

<66> Section 3.1.4.24: RPC over SPX is supported only by Windows NT and Windows 2000. This value is not supported by Windows XP or later client versions, or by Windows Server 2003 or later server versions. The server returns 0x00000000 to indicate failure.

<67> Section 3.1.5.1: Windows applications typically invoke QMSendMessageInternalEx indirectly via the Windows API function MQSendMessage. The Windows API documentation for MQSendMessage includes the following error codes. For descriptions of the following error codes, see [MS-MQMQ] section 2.4. For error codes not described in [MS-MQMQ], refer to [MSDN-MQEIC].

Name

Value

MQ_ERROR_ACCESS_DENIED

0xc00e0025

MQ_ERROR_BAD_SECURITY_CONTEXT

0xc00e0035

MQ_ERROR_CERTIFICATE_NOT_PROVIDED

0xc00e006d

MQ_ERROR_CORRUPTED_INTERNAL_CERTIFICATE

0xc00e002d

MQ_ERROR_CORRUPTED_PERSONAL_CERT_STORE

0xc00e0031

MQ_ERROR_CORRUPTED_SECURITY_DATA

0xc00e0030

MQ_ERROR_COULD_NOT_GET_USER_SID

0xc00e0036

MQ_ERROR_DTC_CONNECT

0xc00e004c

MQ_ERROR_ILLEGAL_FORMATNAME

0xc00e001e

MQ_ERROR_INSUFFICIENT_RESOURCES

0xc00e0027

MQ_ERROR_INVALID_CERTIFICATE

0xc00e002c

MQ_ERROR_INVALID_HANDLE

0xc00e0007

MQ_ERROR_MESSAGE_STORAGE_FAILED

0xc00e002a

MQ_ERROR_NO_INTERNAL_USER_CERT

0xc00e002f

MQ_ERROR_PROPERTY

0xc00e0002

MQ_ERROR_SERVICE_NOT_AVAILABLE

0xc00e000b

MQ_ERROR_STALE_HANDLE

0xc00e0056

MQ_ERROR_TRANSACTION_USAGE

0xc00e0050

MQ_ERROR_TRANSACTION_ENLIST

0xc00e0058

MQ_ERROR_TRANSACTION_SEQUENCE

0xc00e0051

MQ_ERROR_UNSUPPORTED_FORMATNAME_OPERATION

0xc00e0020

MQ_INFORMATION_PROPERTY

0x400e0001

<68> Section 3.1.5.2: Message bodies are stored encrypted when messages reach their destination queues. Servers running Windows NT and Windows 2000 only perform message body decryption in the QMSendMessageInternalEx (section 3.1.5.1) method. If a message with an encrypted body is sent directly to a target queue via the rpc_ACSendMessageEx method, servers running Windows NT and Windows 2000 return STATUS_RETRY (0xc000022d) to indicate that the client calls QMSendMessageInternalEx instead.

<69> Section 3.1.5.2: Clients running Windows NT and Windows 2000 use MQMSG_CALG_MD5 (0x00008003) as the default hash algorithm. Clients running Windows XP 32-bit and Windows Server 2003 32-bit use MQMSG_CALG_SHA1 (0x00008004) as the default hash algorithm.

<70> Section 3.1.5.2: Clients on supported Windows platforms use MQMSG_CALG_RC2 (0x00006602) as the default encryption algorithm value.

<71> Section 3.1.5.2: The ptb.old.pulAuthProvNameLenProp field is ignored on input to send operations on Windows NT.

<72> Section 3.1.5.2: Windows applications typically invoke rpc_ACSendMessageEx indirectly via the Windows API function MQSendMessage. The Windows API documentation for MQSendMessage includes the following error codes. For descriptions of the following error codes, see [MS-MQMQ] section 2.4. For error codes not described in [MS-MQMQ], refer to [MSDN-MQEIC].

Name

Value

MQ_ERROR_ACCESS_DENIED

0xc00e0025

MQ_ERROR_BAD_SECURITY_CONTEXT

0xc00e0035

MQ_ERROR_CERTIFICATE_NOT_PROVIDED

0xc00e006d

MQ_ERROR_CORRUPTED_INTERNAL_CERTIFICATE

0xc00e002d

MQ_ERROR_CORRUPTED_PERSONAL_CERT_STORE

0xc00e0031

MQ_ERROR_CORRUPTED_SECURITY_DATA

0xc00e0030

MQ_ERROR_COULD_NOT_GET_USER_SID

0xc00e0036

MQ_ERROR_DTC_CONNECT

0xc00e004c

MQ_ERROR_ILLEGAL_FORMATNAME

0xc00e001e

MQ_ERROR_INSUFFICIENT_RESOURCES

0xc00e0027

MQ_ERROR_INVALID_CERTIFICATE

0xc00e002c

MQ_ERROR_INVALID_HANDLE

0xc00e0007

MQ_ERROR_MESSAGE_STORAGE_FAILED

0xc00e002a

MQ_ERROR_NO_INTERNAL_USER_CERT

0xc00e002f

MQ_ERROR_PROPERTY

0xc00e0002

MQ_ERROR_SERVICE_NOT_AVAILABLE

0xc00e000b

MQ_ERROR_STALE_HANDLE

0xc00e0056

MQ_ERROR_TRANSACTION_USAGE

0xc00e0050

MQ_ERROR_TRANSACTION_ENLIST

0xc00e0058

MQ_ERROR_TRANSACTION_SEQUENCE

0xc00e0051

MQ_ERROR_UNSUPPORTED_FORMATNAME_OPERATION

0xc00e0020

MQ_INFORMATION_PROPERTY

0x400e0001

<73> Section 3.1.5.3: Windows applications typically invoke rpc_ACReceiveMessageEx indirectly via the Windows API function MQReceiveMessage. The Windows API documentation for MQReceiveMessage includes the following error codes. For descriptions of the following error codes, see [MS-MQMQ] section 2.4. For error codes not described in [MS-MQMQ], refer to [MSDN-MQEIC].

Name

Value

MQ_ERROR_ACCESS_DENIED

0xc00e0025

MQ_ERROR_BUFFER_OVERFLOW

0xc00e001a

MQ_ERROR_DTC_CONNECT

0xc00e004c

MQ_ERROR_FORMATNAME_BUFFER_TOO_SMALL

0xc00e001f

MQ_ERROR_ILLEGAL_CURSOR_ACTION

0xc00e001c

MQ_ERROR_INSUFFICIENT_PROPERTIES

0xc00e003f

MQ_ERROR_INVALID_HANDLE

0xc00e0007

MQ_ERROR_IO_TIMEOUT

0xc00e001b

MQ_ERROR_LABEL_BUFFER_TOO_SMALL

0xc00e005e

MQ_ERROR_MESSAGE_ALREADY_RECEIVED

0xc00e001d

MQ_ERROR_OPERATION_CANCELLED

0xc00e0008

MQ_ERROR_PROV_NAME_BUFFER_TOO_SMALL

0xc00e0063

MQ_ERROR_PROPERTY

0xc00e0002

MQ_ERROR_QUEUE_DELETED

0xc00e005a

MQ_ERROR_SENDER_CERT_BUFFER_TOO_SMALL

0xc00e002b

MQ_ERROR_SENDERID_BUFFER_TOO_SMALL

0xc00e0022

MQ_ERROR_SERVICE_NOT_AVAILABLE

0xc00e000b

MQ_ERROR_SIGNATURE_BUFFER_TOO_SMALL

0xc00e0062

MQ_ERROR_STALE_HANDLE

0xc00e0056

MQ_ERROR_SYMM_KEY_BUFFER_TOO_SMALL

0xc00e0061

MQ_ERROR_TRANSACTION_USAGE

0xc00e0050

MQ_INFORMATION_OPERATION_PENDING

0x400e0006

MQ_INFORMATION_PROPERTY

0x400e0001

<74> Section 3.1.5.3: Windows components that invoke rpc_ACReceiveMessageEx indirectly via the Windows API function MQReceiveMessage test for the following return value. For a description of the following error code, see [MS-ERREF] section 2.1.

Name

Value

E_OUTOFMEMORY

0x8007000E

<75> Section 3.1.5.4: Windows applications typically invoke rpc_ACCreateCursorEx indirectly via the Windows API function MQCreateCursor. The Windows API documentation for MQCreateCursor includes the following error codes. For descriptions of the following error codes, see [MS-MQMQ] section 2.4. For error codes not described in [MS-MQMQ], refer to [MSDN-MQEIC].

Name

Value

MQ_ERROR_INVALID_HANDLE

0xc00e0007

MQ_ERROR_INSUFFICIENT_RESOURCES

0xc00e0027

MQ_ERROR_REMOTE_MACHINE_NOT_AVAILABLE

0xc00e0069

MQ_ERROR_STALE_HANDLE

0xc00e0056

<76> Section 3.1.5.4: The described behavior is for Windows Server 2003 and later server versions, and Windows Vista and later client versions. Servers running Windows NT, Windows 2000, and Windows XP behave as follows: if the given queue handle represents a queue that is NOT local (remote) to the supporting server, the server creates a cursor object and returns a handle to it via the hCursor member of pcc. Additionally, the server also sets pcc.srv_hQueue to RemoteQueueProxyHandle.RemoteContext and sets pcc.cli_pQMQueue to RemoteQueueProxyHandle.Context. Note that the value returned for pcc.cli_pQMQueue is not required to equal the RemoteQueueProxyHandle.Context; instead, the server is permitted to use any value that can be correlated to the impending invocation of rpc_ACSetCursorProperties. Abstractly, the value in RemoteQueueProxyHandle.Context is most suitable for this purpose; however, Windows NT, Windows 2000, and Windows XP correlate the subsequent call rpc_ACSetCursorProperties using a different DWORD value.

The server then returns MQ_INFORMATION_REMOTE_OPERATION (0x400e03e8). This specific return code instructs the client to contact a remote queue manager to create a remote cursor via R_QMCreateRemoteCursor and to associate the result with the local cursor handle via rpc_ACSetCursorProperties. The caller completes these operations successfully prior to using the cursor handle returned by this method.

<77> Section 4.4: In this example, the supporting server is exhibiting the behavior of Windows NT and Windows 2000 with regard to creating a cursor for a remote queue.

<78> Section 4.5: All Windows clients produce new XACTUOW ([MS-MQMQ] section 2.2.18.1.8) values by calling the Windows RPC function UuidCreate.