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) サイズを示す場合があります。バイト 10 と 11 を common.lua_data_ptr フィールドに設定します (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 >