Event notification is an ideal mechanism for notifying ASPI clients of the completion of an ASPI request. ASPI clients may block on this event until completion. Upon completion of a request, the ASPI for Win32 manager sets the event to the signaled state. The ASPI client must make sure that the event is not in a signaled state when an ASPI command request is submitted to the ASPI for Win32 manager. Event notification is illustrated in the following code, which sends a SCSI Inquiry command to target #2.
SRB_ExecSCSICmd MySRB;
HANDLE ASPICompletionEvent;
DWORD ASPIEventStatus;
DWORD ASPIStatus;
char InquiryBuffer[32];   
.
/**************************************************/
/* Create event for MySRB.  Initial state         */
/* non-signaled, manual reset.                    */
/**************************************************/
if ((ASPICompletionEvent = CreateEvent(NULL,FALSE,FALSE,NULL)) == NULL)
   return FALSE;
/**************************************************/
/* Code is entered with 'MySRB' zeroed.           */
/**************************************************/
MySRB.SRB_Cmd     = SC_EXEC_SCSI_CMD;
MySRB.SRB_Flags     = SRB_DIR_SCSI|SRB_EVENT_NOTIFY;
MySRB.SRB_Target     = 2;
MySRB.SRB_BufLen     = 32;
MySRB.SRB_SenseLen    = SENSE_LEN;
MySRB.SRB_BufPointer   = InquiryBuffer;
MySRB.SRB_CDBLen     = 6;
MySRB.CDBByte[0]     = SCSI_INQUIRY;
MySRB.CDBByte[4]     = 32;
MySRB.SRB_PostProc    = ASPICompletionEvent;
.
.
ASPIStatus      = SendASPI32Command ( (LPSRB) &MySRB );
/**************************************************/
/* Block on event till signaled                   */ 
/**************************************************/
if ( MySRB.SRB_Status == SS_PENDING )
   ASPIEventStatus == WaitForSingleObject(ASPICompletionEvent, TIMEOUT);
/**************************************************/
/* Reset event to non-signaled state.             */ 
/**************************************************/
if (ASPIEventStatus == WAIT_OBJECT_0) 
  ResetEvent(ASPICompletionEvent);
          .
          .