;*******************************************; ; ; FFAspiStart: function to initialize ASPI operations. Steps performed: ; ; - load WNASPI32.DLL (if it exists) ; - load the address of GetASPI32Support and SendASPI32Command ; - check ASPI support ; - check that at least one SCSI2 host adapter is installed ; - create the event used for event notification ; ; Takes one parameter, the HWND of the calling program. ; ; This function returns true if successful. Otherwise it sends an error ; message in a messagebox and returns false. ; ;*******************************************; FFAspiStart PROC PARM_1:DWORD ;===========================================; PUSH ESI ; PUSH EDI ; PUSH EBP ; PUSH EBX ; ;===========================================; PUSH PARM_1 ; POP ashWnd ; ;===========================================; INVOKE LoadLibrary, ADDR szAspiDllName MOV hAspiLib, EAX CMP EAX,0 JNZ ASTA_1 INVOKE MessageBoxA, ashWnd, OFFSET szMsg_ASTA_1, OFFSET szCaption_ASTA, MB_OK JMP ASTA_NOK ASTA_1: INVOKE GetProcAddress, hAspiLib, ADDR szGetASPI32SupportInfo MOV fnGetASPI32SupportInfo,EAX CMP EAX,0 JNZ ASTA_2 INVOKE MessageBoxA, ashWnd, OFFSET szMsg_ASTA_2, OFFSET szCaption_ASTA, MB_OK JMP ASTA_NOK ASTA_2: INVOKE GetProcAddress, hAspiLib, ADDR szSendASPI32Command MOV fnSendASPI32Command,EAX CMP EAX,0 JNZ ASTA_3 INVOKE MessageBoxA, ashWnd, OFFSET szMsg_ASTA_3, OFFSET szCaption_ASTA, MB_OK JMP ASTA_NOK ;-------------------------------------------;check ASPI support ASTA_3: MOV EAX,fnGetASPI32SupportInfo CALL EAX ;...........................................;OK !!! CMP AH,SS_COMP JZ ASTA_OK ;...........................................;support not present CMP AH,SS_NO_ASPI JNZ ASTA_4 INVOKE MessageBoxA, ashWnd, OFFSET szMsg_ASTA_4, OFFSET szCaption_ASTA, MB_OK JMP ASTA_NOK ;...........................................;real mode ASTA_4: CMP AH,SS_ILLEGAL_MODE JNZ ASTA_5 INVOKE MessageBoxA, ashWnd, OFFSET szMsg_ASTA_5, OFFSET szCaption_ASTA, MB_OK JMP ASTA_NOK ;...........................................;old manager ASTA_5: CMP AH,SS_OLD_MANAGER JNZ ASTA_6 INVOKE MessageBoxA, ashWnd, OFFSET szMsg_ASTA_6, OFFSET szCaption_ASTA, MB_OK JMP ASTA_NOK ;...........................................; ASTA_6: CMP AH,SS_NO_ADAPTERS JNZ ASTA_7 INVOKE MessageBoxA, ashWnd, OFFSET szMsg_ASTA_7, OFFSET szCaption_ASTA, MB_OK JMP ASTA_NOK ;...........................................; ASTA_7: CMP AH,SS_MISMATCHED_COMPONENTS JNZ ASTA_8 INVOKE MessageBoxA, ashWnd, OFFSET szMsg_ASTA_8, OFFSET szCaption_ASTA, MB_OK JMP ASTA_NOK ;...........................................; ASTA_8: CMP AH,SS_INSUFFICIENT_RESOURCES JNZ ASTA_9 INVOKE MessageBoxA, ashWnd, OFFSET szMsg_ASTA_9, OFFSET szCaption_ASTA, MB_OK JMP ASTA_NOK ;...........................................; ASTA_9: CMP AH,SS_FAILED_INIT JNZ ASTA_10 INVOKE MessageBoxA, ashWnd, OFFSET szMsg_ASTA_10, OFFSET szCaption_ASTA, MB_OK JMP ASTA_NOK ;...........................................;generic error ASTA_10: INVOKE MessageBoxA, ashWnd, OFFSET szMsg_ASTA_11, OFFSET szCaption_ASTA, MB_OK JMP ASTA_NOK ;===========================================; ASTA_OK: AND EAX,0FH MOV HA_Count,EAX ;# of HA installed INVOKE CreateEvent, NULL, TRUE, FALSE, NULL MOV hEventSRB,EAX CMP EAX,0 JNZ ASTA_11 INVOKE MessageBoxA, ashWnd, OFFSET szMsg_ASTA_12, OFFSET szCaption_ASTA, MB_OK JMP ASTA_NOK ASTA_11: MOV EAX,TRUE ;true = ASPI support OK JMP ASTA_0 ASTA_NOK: MOV EAX,FALSE JMP ASTA_0 ;===========================================; ASTA_0: POP EBX ; POP EBP ; POP EDI ; POP ESI ; RET FFAspiStart ENDP ;*******************************************; ; ; FFAspiStop: function to terminate ASPI operations. Steps performed: ; ; - release the event handle that has been used for event notification ; - unload WNASPI32.DLL ; ;*******************************************; FFAspiStop PROC ;===========================================; PUSH ESI ; PUSH EDI ; PUSH EBP ; PUSH EBX ; ;===========================================; INVOKE CloseHandle, hEventSRB INVOKE FreeLibrary, hAspiLib ;===========================================; POP EBX ; POP EBP ; POP EDI ; POP ESI ; ;===========================================; RET FFAspiStop ENDP ;*******************************************; ;*******************************************; RESET_SRB_INQUIRY PROC ;===========================================; LEA EDI,SRB_INQUIRY MOV AL,0 MOV ECX,60 RSEI_1: MOV [EDI],AL INC EDI LOOP RSEI_1 ;===========================================; RET RESET_SRB_INQUIRY ENDP ;*******************************************; RESET_SRB_GDEVB PROC ;===========================================; LEA EDI,SRB_GDEVB MOV AL,0 MOV ECX,12 RSEG_1: MOV [EDI],AL INC EDI LOOP RSEG_1 ;===========================================; RET RESET_SRB_GDEVB ENDP ;*******************************************; RESET_SRB_EXEC PROC ;===========================================; LEA EDI,SRB_EXEC MOV AL,0 MOV ECX,80 RSEE_1: MOV [EDI],AL INC EDI LOOP RSEE_1 ;===========================================; RET RESET_SRB_EXEC ENDP ;*******************************************;