3.1.5.2.13 Receiving a CPMFreeCursorIn Request

When the server receives a CPMFreeCursorIn message request from the client, the server MUST do the following:

  1. Search the ConnectedClientsIdentifiers list for the HANDLE of the named pipe over which the server has received the CPMFreeCursorIn message. If it is not present, the server MUST report a STATUS_INVALID_PARAMETER (0xC000000D) error.

  2. Call the ClientQueryHasCursorHandle abstract interface to the GSS with the HANDLE of the named pipe over which the server has received the CPMFreeCursorIn message as its QueryIdentifier argument and with the _hCursor handle as its CursorHandle argument. If the ContainsHandle output parameter is not true, the server MUST report an error.<35>

  3. Release the cursor and associated resources for this cursor handle by calling the ReleaseCursor abstract interface with the HANDLE of the named pipe over which the server has received the CPMFreeCursorIn message as its QueryIdentifier argument and with the _hCursor handle as its CursorHandle argument.

  4. Respond with a CPMFreeCursorOut message, setting the _cCursorsRemaining field to the number of cursors remaining in this client's list, as returned in the NumCursorsRemaining output parameter to the ReleaseCursor abstract interface call made in the previous step.

  5. Report any errors encountered during message preparation or during any abstract interface call to the GSS. Errors that are specific to this request:

    • E_OUTOFMEMORY: generated by any resource allocation failure on the server or service side.

    • STATUS_INVALID_PARAMETER: generated when any of the parameters passed in by the client is invalid. Invalid parameters are those that do not obey the corresponding data structure layout as defined for their types in this document.

    Any other error code can be returned, but it will be treated as informative only.