Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das folgende Beispiel veranschaulicht die Überprüfung des eingehenden BIND-Bilds mithilfe dieser Features von SLI_OPEN.
lua_vcb.specific.open.lua_open_extension[0].lua_routine_type =
LUA_ROUTINE_TYPE_BIND;
strcpy(lua_vcb.specific.open.lua_open_extension[0].lua_module_name,
"WINSLI32");
strcpy(lua_vcb.specific.open.lua_open_extension[0].lua_procedure_name,
"BindValidation");
lua_vcb.specific.open.lua_open_extension[1].lua_routine_type =
LUA_ROUTINE_TYPE_END;
Beachten Sie, dass für Microsoft Visual C++ 4.0 oder höher und für Windows Server der Funktionsprototyp folgendes sein sollte:
VOID WINAPI BindValidation (LUA_VERB_RECORD FAR * pVerb );
Unter Windows Server entspricht das WINAPI-Makro _STDCall.
Die BIND-Routine hat Zugriff auf den Verbsteuerungsblock der Logischen Einheit Anwendung (LUA), der an ihn übergeben wird. Die BIND-Routine sollte die BIND überprüfen und den entsprechenden primären und sekundären Rückgabecode im LUA-Verbdatensatz angeben. Außerdem kann die Routine die vom SLI-Programm unterstützten primären und sekundären Anforderungs-/Antworteinheitsgrößen angeben, indem Bytes 10 und 11 im Feld common.lua_data_ptr festgelegt werden (wobei der BIND-Befehl angegeben ist).
Im Folgenden sind die Visual C++-Compileroptionen für das Modul aufgeführt, das den Rückruf enthält:
/FA -c -Zle -W3 -WX -Ge -Gy -Gz -Ox -Zd
-DCONDITION_HANDLING -DSTD_CALL
-Di386=1 -D_X86_ -DNT_UP -DWIN32 -DDEVL
-D_DLL -D_MT -DWIN32_SUPPORT
Der folgende Code wird für den Rückruf generiert:
PUBLIC _BindValidation@4
; COMDAT _BindValidation@4
_TEXT SEGMENT
_pVerb$ = 8
_BindValidation@4 PROC NEAR ; COMDAT
// pVerb->common.lua_prim_rc = LUA_STATE_CHECK;
mov eax, DWORD PTR _pVerb$[esp-4]
mov WORD PTR [eax+4], 512 ; 00000200H
ret 4
_BindValidation@4 ENDP
_TEXT ENDS
Es folgt der von SLI generierte Code, um diesen Rückruf aufzurufen:
// (*aSCB->bind_rtn)(sliVCB);
push ebp
call DWORD PTR [ebx+188]
// note there is no ADD ESP,4 following the call
Nachfolgend sehen Sie die interne Clientablaufverfolgung, die WINSLI zeigt, dass der vom Benutzer bereitgestellte Bindungsüberprüfungsrückruf erkannt wird:
|00000157.000000f7 OUDMD Opening User DLL Modules
|00000157.000000f7 OUDMD Opening a Bind Routine
|00000157.000000f7 OUDMD Opening DLL = WINSLI32
|00000157.000000f7 OUDMD Loading Routine = BindValidation
Nachfolgend sehen Sie die interne Clientablaufverfolgung mit dem Rückruf der Bindungsüberprüfung:
|00000157.0000015c CLUAD Calling BIND Routine
|00000157.0000015c CLUAD Return from BIND routine, prc=512
|00000157.0000015c CLUAD Returned With Error From Routine
|00000157.0000015c FrRUI Freeing RUI vcb = 0x14E424
|00000157.0000015c BINDP USER BIND ROUTINE FAILED
Im Folgenden sehen Sie eine API-Ablaufverfolgung, um den Bindungsüberprüfungsfehler anzuzeigen:
000015c SLI ---------------------------------------------- 11:11:52.28
000015c SLI SLI_OPEN post
000015c SLI SESSION_FAILURE - NEG_RSP_FROM_BIND_ROUTINE
000015c SLI ---- Verb Parameter Block at address 00405150 ----
000015c SLI 52004900 000F0000 00000039 01000000
<R.I........9....>
000015c SLI 00000000 4C553220 20202020 48000000
<....LU2 H...>
000015c SLI 88E01400 00000400 C0904000 F4000000
<h.........@.4...>
000015c SLI 00000000 00000000 00000040 00000000
<...........@....>
000015c SLI 00000000 02000000 0157494E 534C4933
<.........WINSLI3>
000015c SLI 32004269 6E645661 6C696461 74696F6E
<2.BindValidation>
000015c SLI 00000000 00000000 00000000 00000000
<................>
000015c SLI 00000000 00000000 00000000 00000000
<................>
000015c SLI 00000000 00000000 00000000 00000000
<................>
000015c SLI 00000000 00000000 00000000 00000000
<................>
000015c SLI 00000000 00000000 00000000 00000000
<................>
000015c SLI 00000000 00000000 00000000 00000000
<................>
000015c SLI 00000000 00000000 0000
<.......... >
000015c SLI ---- Data at address 004090C0 ----
000015c SLI 86998584
<fred >