BIND 範例

下列範例說明如何使用SLI_OPEN的這些功能來檢查傳入的 BIND 映射。

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;  
  

請注意,對於 Microsoft Visual C++ 4.0 或更新版本,以及 Windows Server,函式原型應該是:

VOID WINAPI BindValidation (LUA_VERB_RECORD FAR * pVerb );  
  

在 Windows Server 上,WINAPI 宏相當於_STDCall。

BIND 常式可以存取 (LUA) 動詞控制區塊 (VCB) 傳遞給它的邏輯單元應用程式。 BIND 常式應該驗證 BIND,並指出 LUA 動詞記錄中適當的工作階段層級介面 (SLI) 主要和次要傳回碼。 此外,常式可能會指出 SLI 程式所支援的主要和次要要求/回應單位 (RU) 大小,方法是在common.lua_data_ptr欄位中設定位元組 10 和 11, (其中會指出 BIND 命令) 。

以下是包含回呼之模組的 Visual C++ 編譯器選項:

/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  
  

以下是針對回呼產生的程式碼:

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  

以下是 SLI 產生以呼叫此回呼的程式碼:

// (*aSCB->bind_rtn)(sliVCB);  
push    ebp  
call    DWORD PTR [ebx+188]  
// note there is no ADD ESP,4 following the call  

以下是用戶端內部追蹤,其中顯示 WINSLI 偵測使用者提供的系結驗證回呼:

|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  

以下是顯示系結驗證回呼的用戶端內部追蹤:

|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  

以下是用來顯示系結驗證錯誤的 API 追蹤:

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            >