第一部分:
1: kd> t
 RPCRT4!OSF_CCALL::ActivateCall:
 001b:77bf5789 55              push    ebp
 1: kd> kc
  #
 00 RPCRT4!OSF_CCALL::ActivateCall
 01 RPCRT4!OSF_CASSOCIATION::AllocateCCall
 02 RPCRT4!OSF_BINDING_HANDLE::AllocateCCall
 03 RPCRT4!OSF_BINDING_HANDLE::NegotiateTransferSyntax
 04 RPCRT4!I_RpcGetBufferWithObject
 05 RPCRT4!I_RpcGetBuffer
 06 RPCRT4!NdrGetBuffer
 07 RPCRT4!NdrClientCall2
 08 ADVAPI32!LsarGetUserName
 09 ADVAPI32!LsaGetUserName
 0a ntdll!RtlpWaitOrTimerCallout
 1: kd> dv
                  this = 00ce1b98
         BindingHandle = 0x00ce1730
               Binding = 0x00ce1fa8
 AvailableBindingsList = 0x00000000
           CallIdToUse = 1
      InitialCallState = NeedOpenAndBind (0n0)
         DispatchTable = 0x00000000
           CConnection = 0x00ce1958
                Status = 0n1
1: kd> dx -id 0,0,898d2250 -r1 ((RPCRT4!OSF_CCALL *)0xce1b98)
 ((RPCRT4!OSF_CCALL *)0xce1b98)                 : 0xce1b98 [Type: OSF_CCALL *]
     [+0x004] MagicLong        : 0x89abcdef [Type: unsigned long]
     [+0x008] ObjectType       : 32 [Type: int]
     [+0x00c] RefCount         [Type: INTERLOCKED_INTEGER]
     [+0x010] NestingCall      : 0xbaadf00d [Type: CALL *]
     [+0x014] pAsync           : 0xbaadf00d [Type: _RPC_ASYNC_STATE *]
     [+0x018] NotificationIssued : -1163005939 [Type: long]
     [+0x01c] AsyncStatus      : -1163005939 [Type: long]
     [+0x020] CachedAPCInfo    [Type: RPC_APC_INFO]
     [+0x030] CachedAPCInfoAvailable : 1 [Type: int]
     [+0x034] CallingThread    : 0xbaadf00d [Type: THREAD *]
     [+0x038] UuidSpecified    : -1163005939 [Type: int]
     [+0x03c] ObjectUuid       : {BAADF00D-F00D-BAAD-0DF0-ADBA0DF0ADBA} [Type: _GUID]
     [+0x04c] EEInfo           : 0x0 [Type: tagExtendedErrorInfo *]
     [+0x050] CurrentState     : -1163005939 [Type: OSF_CCALL_STATE]
     [+0x054] Connection       : 0xbaadf00d [Type: OSF_CCONNECTION *]
     [+0x058] BindingHandle    : 0xbaadf00d [Type: OSF_BINDING_HANDLE *]
     [+0x05c] CallbackLevel    : 0 [Type: int]
     [+0x060] Bindings         [Type: OSF_CCALL::__unnamed]
     [+0x068] CurrentBuffer    : 0xbaadf00d [Type: void *]
     [+0x06c] fDataLengthNegotiated : -1163005939 [Type: int]
     [+0x070] CurrentOffset    : -1163005939 [Type: int]
     [+0x074] CurrentBufferLength : 0xbaadf00d [Type: unsigned long]
     [+0x078] CallId           : 0xbaadf00d [Type: unsigned long]
     [+0x07c] RcvBufferLength  : 0xbaadf00d [Type: unsigned int]
     [+0x080] FirstSend        : -1163005939 [Type: int]
     [+0x084] DispatchTableCallback : 0xbaadf00d [Type: RPC_DISPATCH_TABLE *]
     [+0x088] MaximumFragmentLength : 0xbaadf00d [Type: unsigned int]
     [+0x08c] MaxSecuritySize  : 0xbaadf00d [Type: unsigned int]
     [+0x090] MaxDataLength    : 0xbaadf00d [Type: unsigned int]
     [+0x094] ProcNum          : -1163005939 [Type: int]
     [+0x098] ReservedForSecurity : 0x0 [Type: unsigned char *]
     [+0x09c] SecBufferLength  : 0x0 [Type: unsigned int]
     [+0x0a0] HeaderSize       : 0xbaadf00d [Type: unsigned int]
     [+0x0a4] AdditionalSpaceForSecurity : 0xbaadf00d [Type: unsigned int]
     [+0x0a8] SavedHeaderSize  : 0x0 [Type: unsigned long]
     [+0x0ac] SavedHeader      : 0x0 [Type: void *]
     [+0x0b0] LastBuffer       : 0xbaadf00d [Type: void *]
     [+0x0b4] SyncEvent        [Type: EVENT]
     [+0x0b8] ActualBufferLength : 0xbaadf00d [Type: unsigned int]
     [+0x0bc] NeededLength     : 0xbaadf00d [Type: unsigned int]
     [+0x0c0] CallSendContext  : 0xce1cd0 [Type: void *]
     [+0x0c4] fAdvanceCallCount [Type: INTERLOCKED_INTEGER]
     [+0x0c8] fPeerChoked      : -1163005939 [Type: int]
     [+0x0cc] Flags            [Type: CompositeFlags]
     [+0x0d0] fLastSendComplete : -1163005939 [Type: int]
     [+0x0d4] CallMutex        [Type: MUTEX]
     [+0x0ec] RecursiveCallsKey : -1163005939 [Type: int]
     [+0x0f0] AllocHint        : 0xbaadf00d [Type: unsigned long]
     [+0x0f4] CallStack        : -1163005939 [Type: int]
     [+0x0f8] fCallCancelled   : -1163005939 [Type: int]
     [+0x0fc] CancelState      : -1163005939 [Type: CANCEL_STATE]
     [+0x100] BufferQueue      [Type: QUEUE]
     [+0x12c] InReply          : 0 [Type: int]
     [+0x130] fChoked          : -1163005939 [Type: int]
 第二部分:
1: kd> dv
                  this = 00ce1b98
         BindingHandle = 0x00ce1730
     Connection = CConnection;
     this->BindingHandle = BindingHandle;
 第三部分:
 1: kd> dv
                  this = 0x00ce18b4
         BindingHandle = 0x00ce1730
               Binding = 0x00ce1fa8
 AvailableBindingsList = 0x00000000
           CallIdToUse = 1
     CallId = CallIdToUse;
 1: kd>  dx -id 0,0,898d2250 -r1 ((RPCRT4!OSF_CASSOCIATION *)0xce1840)
 ((RPCRT4!OSF_CASSOCIATION *)0xce1840)                 : 0xce1840 [Type: OSF_CASSOCIATION *]
     [+0x004] MagicLong        : 0x89abcdef [Type: unsigned long]
     [+0x008] ObjectType       : 512 [Type: int]
[+0x070] CallIdCounter : 0x2 [Type: unsigned long]
第四部分:CallIdCounter是RPCRT4!OSF_CASSOCIATION结构成员
 RPC_STATUS
 OSF_CASSOCIATION::AllocateCCall (
     IN OSF_BINDING_HANDLE *BindingHandle,
     IN PRPC_MESSAGE Message,
     IN CLIENT_AUTH_INFO * ClientAuthInfo,
     OUT OSF_CCALL ** pCCall,
     OUT BOOL *fBindingHandleReferenceRemoved
     )
 {
     CallIdToUse = CallIdCounter++;
CurrentState = InitialCallState;
        Status = Connection->AddActiveCall(
                                        CallIdToUse,
                                        this);
第五部分:RPCRT4!OSF_CCONNECTION结构中的ActiveCalls
 1: kd> dx -id 0,0,898d2250 -r1 ((RPCRT4!OSF_CCONNECTION *)0xce1958)
 ((RPCRT4!OSF_CCONNECTION *)0xce1958)                 : 0xce1958 [Type: OSF_CCONNECTION *]
     [+0x004] MagicLong        : 0x89abcdef [Type: unsigned long]
     [+0x008] ObjectType       : 128 [Type: int]
[+0x0b0] ActiveCalls [Type: OSF_CCALL_DICT2]
1: kd> dx -id 0,0,898d2250 -r1 (*((RPCRT4!OSF_CCALL_DICT2 *)0xce1a08))
 (*((RPCRT4!OSF_CCALL_DICT2 *)0xce1a08))                 [Type: OSF_CCALL_DICT2]
     [+0x000] DictKeys         : 0xce1a14 [Type: void * *]
     [+0x004] DictItems        : 0xce1a24 [Type: void * *]
     [+0x008] cDictSlots       : 0x4 [Type: unsigned int]
     [+0x00c] InitialDictKeys  [Type: void * [4]]
     [+0x01c] InitialDictItems [Type: void * [4]]
 1: kd> dx -id 0,0,898d2250 -r1 (*((RPCRT4!void * (*)[4])0xce1a14))
 (*((RPCRT4!void * (*)[4])0xce1a14))                 [Type: void * [4]]
     [0]              : 0x0 [Type: void *]
     [1]              : 0x0 [Type: void *]
     [2]              : 0x0 [Type: void *]
     [3]              : 0x0 [Type: void *]
 1: kd> dx -id 0,0,898d2250 -r1 (*((RPCRT4!void * (*)[4])0xce1a24))
 (*((RPCRT4!void * (*)[4])0xce1a24))                 [Type: void * [4]]
     [0]              : 0x0 [Type: void *]
     [1]              : 0x0 [Type: void *]
     [2]              : 0x0 [Type: void *]
     [3]              : 0x0 [Type: void *]
第六部分:
     Bindings.SelectedBinding = Binding;
     Bindings.AvailableBindingsList = AvailableBindingsList;
1: kd> dv
                  this = 0x00ce18b4
         BindingHandle = 0x00ce1730
               Binding = 0x00ce1fa8            这里有Binding
 AvailableBindingsList = 0x00000000
1: kd> dx -id 0,0,898d2250 -r1 ((RPCRT4!OSF_BINDING *)0xce1fa8)
 ((RPCRT4!OSF_BINDING *)0xce1fa8)                 : 0xce1fa8 [Type: OSF_BINDING *]
     [+0x000] InterfaceId      [Type: _RPC_SYNTAX_IDENTIFIER]
     [+0x014] TransferSyntaxInfo [Type: TRANSFER_SYNTAX_INFO_ATOM]
     [+0x030] NextBinding      : 0x0 [Type: MTSyntaxBinding *]
     [+0x034] PresentationContext : 0 [Type: int]
     [+0x038] CapabilitiesBitmap : 1 [Type: int]
     [+0x03c] RefCount         [Type: INTERLOCKED_INTEGER]
     [+0x040] Flags            [Type: CompositeFlags]
 第七部分:参考
     inline OSF_BINDING *
     GetListOfAvaialbleBindings (
         OUT BOOL *fMultipleBindingsAvailable
         )
     {
         if (Bindings.AvailableBindingsList)
             {
             *fMultipleBindingsAvailable = TRUE;
             return Bindings.AvailableBindingsList;
             }
         else
             {
             *fMultipleBindingsAvailable = FALSE;
             return Bindings.SelectedBinding;
             }
     }
 第八部分:
 1: kd> dt osf_ccall 00ce1b98
 RPCRT4!OSF_CCALL
    +0x000 __VFN_table : 0x77bd3278
    +0x004 MagicLong        : 0x89abcdef
    +0x008 ObjectType       : 0n32
  
    +0x060 Bindings         : OSF_CCALL::__unnamed
 1: kd> dx -id 0,0,898d2250 -r1 (*((RPCRT4!OSF_CCALL::__unnamed *)0xce1bf8))
 (*((RPCRT4!OSF_CCALL::__unnamed *)0xce1bf8))                 [Type: OSF_CCALL::__unnamed]
     [+0x000] SelectedBinding  : 0xce1fa8 [Type: OSF_BINDING *]
     [+0x004] AvailableBindingsList : 0x0 [Type: OSF_BINDING *]
 1: kd> dx -id 0,0,898d2250 -r1 ((RPCRT4!OSF_BINDING *)0xce1fa8)
 ((RPCRT4!OSF_BINDING *)0xce1fa8)                 : 0xce1fa8 [Type: OSF_BINDING *]
     [+0x000] InterfaceId      [Type: _RPC_SYNTAX_IDENTIFIER]
     [+0x014] TransferSyntaxInfo [Type: TRANSFER_SYNTAX_INFO_ATOM]
     [+0x030] NextBinding      : 0x0 [Type: MTSyntaxBinding *]
     [+0x034] PresentationContext : 0 [Type: int]
     [+0x038] CapabilitiesBitmap : 1 [Type: int]
     [+0x03c] RefCount         [Type: INTERLOCKED_INTEGER]
     [+0x040] Flags            [Type: CompositeFlags]
第九部分:
 1: kd> dx -id 0,0,898d2250 -r1 ((RPCRT4!OSF_CCONNECTION *)0xce1958)
 ((RPCRT4!OSF_CCONNECTION *)0xce1958)                 : 0xce1958 [Type: OSF_CCONNECTION *]
     [+0x004] MagicLong        : 0x89abcdef [Type: unsigned long]
     [+0x008] ObjectType       : 128 [Type: int]
[+0x054] fExclusive : 1 [Type: int]
     if (Connection->fExclusive == 0)        //不成立
         {
         //
 第十部分:最终结果
 1: kd> dt osf_ccall 00ce1b98
 RPCRT4!OSF_CCALL
    +0x000 __VFN_table : 0x77bd3278
    +0x004 MagicLong        : 0x89abcdef
    +0x008 ObjectType       : 0n32
    +0x00c RefCount         : INTERLOCKED_INTEGER
    +0x010 NestingCall      : 0xbaadf00d CALL
    +0x014 pAsync           : (null)
    +0x018 NotificationIssued : 0n-1163005939
    +0x01c AsyncStatus      : 0n-1163005939
    +0x020 CachedAPCInfo    : RPC_APC_INFO
    +0x030 CachedAPCInfoAvailable : 0n1
    +0x034 CallingThread    : (null)
    +0x038 UuidSpecified    : 0n-1163005939
    +0x03c ObjectUuid       : _GUID {baadf00d-f00d-baad-0df0-adba0df0adba}
    +0x04c EEInfo           : (null)
    +0x050 CurrentState     : 0 ( NeedOpenAndBind )
    +0x054 Connection       : 0x00ce1958 OSF_CCONNECTION
    +0x058 BindingHandle    : 0x00ce1730 OSF_BINDING_HANDLE
    +0x05c CallbackLevel    : 0n0
    +0x060 Bindings         : OSF_CCALL::__unnamed
    +0x068 CurrentBuffer    : (null)
    +0x06c fDataLengthNegotiated : 0n0
    +0x070 CurrentOffset    : 0n0
    +0x074 CurrentBufferLength : 0xbaadf00d
    +0x078 CallId           : 1
    +0x07c RcvBufferLength  : 0
    +0x080 FirstSend        : 0n-1163005939
    +0x084 DispatchTableCallback : (null)
    +0x088 MaximumFragmentLength : 0
    +0x08c MaxSecuritySize  : 0
    +0x090 MaxDataLength    : 0
    +0x094 ProcNum          : 0n-1163005939
    +0x098 ReservedForSecurity : (null)
    +0x09c SecBufferLength  : 0
    +0x0a0 HeaderSize       : 0
    +0x0a4 AdditionalSpaceForSecurity : 0
    +0x0a8 SavedHeaderSize  : 0
    +0x0ac SavedHeader      : (null)
    +0x0b0 LastBuffer       : (null)
    +0x0b4 SyncEvent        : EVENT
    +0x0b8 ActualBufferLength : 0xbaadf00d
    +0x0bc NeededLength     : 0
    +0x0c0 CallSendContext  : 0x00ce1cd0 Void
    +0x0c4 fAdvanceCallCount : INTERLOCKED_INTEGER
    +0x0c8 fPeerChoked      : 0n0
    +0x0cc Flags            : CompositeFlags
    +0x0d0 fLastSendComplete : 0n-1163005939
    +0x0d4 CallMutex        : MUTEX
    +0x0ec RecursiveCallsKey : 0n-1
    +0x0f0 AllocHint        : 0
    +0x0f4 CallStack        : 0n0
    +0x0f8 fCallCancelled   : 0n0
    +0x0fc CancelState      : 0 ( CANCEL_NOTREGISTERED )
    +0x100 BufferQueue      : QUEUE
    +0x12c InReply          : 0n0
    +0x130 fChoked          : 0n-1163005939
