CDI_Blocking_Execute_HACB

Initiates the execution of a HACB not associated with a CDM message by issuing it to a HAM. It can also be used to initiate execution of a HACB associated with a queued CDM message outside the context of CDM_Execute_CDMMessage.

Thread Context:Blocking

Syntax

    LONG CDI_Blocking_Execute_HACB (
       LONG   npaBusID,
       LONG   hacbPutHandle
       );
    
    

Parameters

npaBusID
(IN) The object ID that NWPA assigned to the target bus in its object database. The CDM received this ID through its CDM_Inquiry entry point during which it bound to the device.
hacbPutHandle
(IN) Handle to the HACB request being executed. The value of this parameter is obtained from the hacbPutHandle field of the original SuperHACB's member HACB.

Return Values

The following table lists return values and descriptions.

zero

Successful

nonzero

Unsuccessful

Remarks

This functions is used if the CDM must issue multiple HACBs to the HAM to complete a single CDM message request. It must be called from a blocking thread. Typically, a CDM uses CDI_Blocking_Execute_HACB within the context of CDM_Inquiry, also a blocking thread, to test a device to see if it should bind to the device. CDI_Blocking_Execute_HACB causes the OS to treat the current thread as if it were the current process. This ensures that a request is carried to completion, and instructions immediately following this call can expect the request data to be present. Consequently, since CDI_Blocking_Execute_HACB runs a HACB request to completion, a callback is not necessary unlike the requirement for its non-blocking counterpart, CDI_Execute_HACB.

If this function is used to initiate execution of a queued message, the entity that queued the message must maintain responsibility to handle aborts for the queued message if necessary. This means that if an abort is issued on this message, the queuing entity (usually the CDM) is responsible to abort the message and correctly handle any processes, tasks, etc. that were issued as a result of this message being received, then return the appropriate abort completion code. This responsibility continues until the message is completed via CDI_Complete_Message.