3.1.4.5 RemoteQMCloseCursor (Opnum 4)

The RemoteQMCloseCursor method closes the handle for a previously created cursor. The client MUST call this method to reclaim resources on the server allocated by the qmcomm:R_QMCreateRemoteCursor method, as specified in [MS-MQMP] section 3.1.4.4.

 HRESULT RemoteQMCloseCursor(
   [in] handle_t hBind,
   [in] DWORD hQueue,
   [in] DWORD hCursor
 );

hBind:  MUST be set to an RPC binding handle, as specified in [MS-RPCE] section 2.

hQueue:  A queue handle value upon which the cursor operates.

hCursor: Specifies the cursor handle to be closed.

Return Values:  The method MUST return MQ_OK (0x00000000) on success; otherwise, it MUST return a failure HRESULT, and the client MUST treat all failure HRESULTs identically.

MQ_OK (0x00000000)

MQ_ERROR_INVALID_HANDLE (0xC00E0007)

Exceptions Thrown: No exceptions are thrown except those thrown by the underlying RPC protocol, as specified in [MS-RPCE].

When processing this call, the server MUST:

  • For each queue present in the QueueManager.QueueCollection:

    • For each OpenQueueDescriptor in Queue.OpenQueueDescriptorCollection:

      • If OpenQueueDescriptor.Handle= hQueue, use that OpenQueueDescriptor for processing.

  • For each cursor in OpenQueueDescriptor.CursorCollection:

    • If Cursor.Handle= hCursor, use that cursor object for processing.

  • If hQueue or hCursor is not found, return MQ_ERROR_INVALID_HANDLE(0xc00e0007).

  • Generate a Close Cursor event with the following inputs:

    • iCursor:= reference to cursor object obtained earlier.

  • Return MQ_OK (0x00000000).