Npfs!NpFsdCreate函数分析之从NpCreateClientEnd函数分析到Npfs!NpSetConnectedPipeState


第一部分:

1: kd> g
Breakpoint 5 hit
Npfs!NpFsdCreate:
baaecba6 55              push    ebp
1: kd> kc
 #
00 Npfs!NpFsdCreate
01 nt!IofCallDriver
02 nt!IopParseDevice
03 nt!ObpLookupObjectName
04 nt!ObOpenObjectByName
05 nt!IopCreateFile
06 nt!IoCreateFile
07 nt!NtCreateFile
08 nt!_KiSystemService
09 SharedUserData!SystemCallStub
0a ntdll!NtCreateFile
0b kernel32!CreateFileW
0c RPCRT4!NMP_Open
0d RPCRT4!OSF_CCONNECTION::TransOpen
0e RPCRT4!OSF_CCONNECTION::OpenConnectionAndBind
0f RPCRT4!OSF_CCALL::BindToServer
10 RPCRT4!OSF_BINDING_HANDLE::AllocateCCall
11 RPCRT4!OSF_BINDING_HANDLE::NegotiateTransferSyntax
12 RPCRT4!I_RpcGetBufferWithObject
13 RPCRT4!I_RpcGetBuffer
14 RPCRT4!NdrGetBuffer
15 RPCRT4!NdrClientCall2
16 ADVAPI32!LsarOpenPolicy2
17 ADVAPI32!LsaOpenPolicy

1: kd> dv
 NpfsDeviceObject = 0x895b5038
              Irp = 0x89544d30
     DeferredList = struct _LIST_ENTRY [ 0xbab18b38 - 0x30 ]
RelatedFileObject = 0x00000000
              Ccb = 0xbab18a4c
      RelatedType = 0x89 ''
    RemainingPart = ""
         FileName = ""
            IrpSp = 0x00000000
              Fcb = 0x00000008
    DesiredAccess = 0xbaaecba7


1: kd> dt io_stack_location 0x89544d30+70
GDI32!IO_STACK_LOCATION
   +0x000 MajorFunction    : 0 ''
   +0x001 MinorFunction    : 0 ''
   +0x002 Flags            : 0 ''
   +0x003 Control          : 0 ''
   +0x004 Parameters       : __unnamed
   +0x014 DeviceObject     : 0x895b5038 _DEVICE_OBJECT
   +0x018 FileObject       : 0x8978b348 _FILE_OBJECT        +0x018 FileObject       : 0x8978b348
   +0x01c CompletionRoutine : (null)
   +0x020 Context          : (null)
1: kd> dx -id 0,0,89429250 -r1 ((GDI32!_FILE_OBJECT *)0x8978b348)
((GDI32!_FILE_OBJECT *)0x8978b348)                 : 0x8978b348 [Type: _FILE_OBJECT *]
    [+0x000] Type             : 5 [Type: short]
    [+0x002] Size             : 112 [Type: short]
    [+0x004] DeviceObject     : 0x895b5038 : Device for "\FileSystem\Npfs" [Type: _DEVICE_OBJECT *]
    [+0x008] Vpb              : 0x0 [Type: _VPB *]
    [+0x00c] FsContext        : 0x0 [Type: void *]                 //FsContext        : 0x0
    [+0x010] FsContext2       : 0x0 [Type: void *]
    [+0x014] SectionObjectPointer : 0x0 [Type: _SECTION_OBJECT_POINTERS *]
    [+0x018] PrivateCacheMap  : 0x0 [Type: void *]
    [+0x01c] FinalStatus      : 0 [Type: long]
    [+0x020] RelatedFileObject : 0x0 [Type: _FILE_OBJECT *]            //RelatedFileObject : 0x0
    [+0x024] LockOperation    : 0x0 [Type: unsigned char]
    [+0x025] DeletePending    : 0x0 [Type: unsigned char]
    [+0x026] ReadAccess       : 0x0 [Type: unsigned char]
    [+0x027] WriteAccess      : 0x0 [Type: unsigned char]
    [+0x028] DeleteAccess     : 0x0 [Type: unsigned char]
    [+0x029] SharedRead       : 0x0 [Type: unsigned char]
    [+0x02a] SharedWrite      : 0x0 [Type: unsigned char]
    [+0x02b] SharedDelete     : 0x0 [Type: unsigned char]
    [+0x02c] Flags            : 0x0 [Type: unsigned long]
    [+0x030] FileName         : "\lsarpc" [Type: _UNICODE_STRING]         //FileName         : "\lsarpc"
    [+0x038] CurrentByteOffset : {0} [Type: _LARGE_INTEGER]
    [+0x040] Waiters          : 0x0 [Type: unsigned long]
    [+0x044] Busy             : 0x0 [Type: unsigned long]
    [+0x048] LastLock         : 0x0 [Type: void *]
    [+0x04c] Lock             [Type: _KEVENT]
    [+0x05c] Event            [Type: _KEVENT]
    [+0x06c] CompletionContext : 0x0 [Type: _IO_COMPLETION_CONTEXT *]

    if (RelatedFileObject != NULL) {                不符合
        RelatedType = NpDecodeFileObject (RelatedFileObject,
                                          &Fcb,
                                          &Ccb,
                                          NULL);
    }


第二部分:    Status = NpTranslateAlias (&FileName);

FileName          = *(PUNICODE_STRING)&IrpSp->FileObject->FileName;

    [+0x030] FileName         : "\lsarpc" [Type: _UNICODE_STRING]


1: kd> x npfs!NpAliasListByLength
baaeb094          Npfs!NpAliasListByLength = struct _SINGLE_LIST_ENTRY [5]
1: kd> dx -id 0,0,89429250 -r1 (*((Npfs!_SINGLE_LIST_ENTRY (*)[5])0xbaaeb094))
(*((Npfs!_SINGLE_LIST_ENTRY (*)[5])0xbaaeb094))                 [Type: _SINGLE_LIST_ENTRY [5]]
    [0]              [Type: _SINGLE_LIST_ENTRY]
    [1]              [Type: _SINGLE_LIST_ENTRY]
    [2]              [Type: _SINGLE_LIST_ENTRY]
    [3]              [Type: _SINGLE_LIST_ENTRY]
    [4]              [Type: _SINGLE_LIST_ENTRY]

1: kd> x npfs!NpAliasListByLength
baaeb094          Npfs!NpAliasListByLength = struct _SINGLE_LIST_ENTRY [5]
1: kd> dx -id 0,0,89429250 -r1 (*((Npfs!_SINGLE_LIST_ENTRY (*)[5])0xbaaeb094))
(*((Npfs!_SINGLE_LIST_ENTRY (*)[5])0xbaaeb094))                 [Type: _SINGLE_LIST_ENTRY [5]]

    [2]              [Type: _SINGLE_LIST_ENTRY]

1: kd> dx -id 0,0,89429250 -r1 (*((Npfs!_SINGLE_LIST_ENTRY *)0xbaaeb09c))
(*((Npfs!_SINGLE_LIST_ENTRY *)0xbaaeb09c))                 [Type: _SINGLE_LIST_ENTRY]
    [+0x000] Next             : 0x8978fba8 [Type: _SINGLE_LIST_ENTRY *]
1: kd> dx -id 0,0,89429250 -r1 ((Npfs!_SINGLE_LIST_ENTRY *)0x8978fba8)
((Npfs!_SINGLE_LIST_ENTRY *)0x8978fba8)                 : 0x8978fba8 [Type: _SINGLE_LIST_ENTRY *]
    [+0x000] Next             : 0x8978fbd8 [Type: _SINGLE_LIST_ENTRY *]
1: kd> dx -id 0,0,89429250 -r1 ((Npfs!_SINGLE_LIST_ENTRY *)0x8978fbd8)
((Npfs!_SINGLE_LIST_ENTRY *)0x8978fbd8)                 : 0x8978fbd8 [Type: _SINGLE_LIST_ENTRY *]
    [+0x000] Next             : 0x0 [Type: _SINGLE_LIST_ENTRY *]

1: kd> dt npfs!_ALIAS 0x8978fba8
   +0x000 ListEntry        : _SINGLE_LIST_ENTRY
   +0x004 TranslationString : 0x8978fb78 _UNICODE_STRING "\LSASS"
   +0x008 AliasString      : _UNICODE_STRING "\LSARPC"

第三部分: Fcb = NpFindPrefix (&FileName, CaseInsensitive, &RemainingPart);

PFCB
NpFindPrefix (
    IN PUNICODE_STRING String,
    IN BOOLEAN CaseInsensitive,
    OUT PUNICODE_STRING RemainingPart
    )
{
。。。。。。
    Fcb = CONTAINING_RECORD( PrefixTableEntry, FCB, PrefixTableEntry );


1: kd> x npfs!NpVcb
baaeb090          Npfs!NpVcb = 0x895b50f0
1: kd> dx -id 0,0,89429250 -r1 ((Npfs!_VCB *)0x895b50f0)
((Npfs!_VCB *)0x895b50f0)                 : 0x895b50f0 [Type: _VCB *]
    [+0x000] NodeTypeCode     : 0x1 [Type: unsigned char]
    [+0x004] RootDcb          : 0xe14e3338 [Type: _FCB *]
    [+0x008] OpenCount        : 0x0 [Type: unsigned long]
    [+0x00c] PrefixTable      [Type: _UNICODE_PREFIX_TABLE]
    [+0x018] Resource         [Type: _ERESOURCE]
    [+0x050] EventTable       [Type: _EVENT_TABLE]
    [+0x078] WaitQueue        [Type: _WAIT_QUEUE]
1: kd> dx -id 0,0,89429250 -r1 (*((Npfs!_UNICODE_PREFIX_TABLE *)0x895b50fc))
(*((Npfs!_UNICODE_PREFIX_TABLE *)0x895b50fc))                 [Type: _UNICODE_PREFIX_TABLE]
    [+0x000] NodeTypeCode     : 2048 [Type: short]
    [+0x002] NameLength       : 0 [Type: short]
    [+0x004] NextPrefixTree   : 0xe15ec3e8 [Type: _UNICODE_PREFIX_TABLE_ENTRY *]
    [+0x008] LastNextEntry    : 0x0 [Type: _UNICODE_PREFIX_TABLE_ENTRY *]
1: kd> dx -id 0,0,89429250 -r1 ((Npfs!_UNICODE_PREFIX_TABLE_ENTRY *)0xe15ec3e8)
((Npfs!_UNICODE_PREFIX_TABLE_ENTRY *)0xe15ec3e8)                 : 0xe15ec3e8 [Type: _UNICODE_PREFIX_TABLE_ENTRY *]
    [+0x000] NodeTypeCode     : 2049 [Type: short]
    [+0x002] NameLength       : 3 [Type: short]
    [+0x004] NextPrefixTree   : 0xe1636b80 [Type: _UNICODE_PREFIX_TABLE_ENTRY *]
    [+0x008] CaseMatch        : 0xe15ec3e8 [Type: _UNICODE_PREFIX_TABLE_ENTRY *]
    [+0x00c] Links            [Type: _RTL_SPLAY_LINKS]
    [+0x018] Prefix           : 0xe15ec3d8 : "\TerminalServer\AutoReconnect" [Type: _UNICODE_STRING *]
1: kd> dx -id 0,0,89429250 -r1 ((Npfs!_UNICODE_PREFIX_TABLE_ENTRY *)0xe1636b80)
((Npfs!_UNICODE_PREFIX_TABLE_ENTRY *)0xe1636b80)                 : 0xe1636b80 [Type: _UNICODE_PREFIX_TABLE_ENTRY *]
    [+0x000] NodeTypeCode     : 2049 [Type: short]
    [+0x002] NameLength       : 2 [Type: short]
    [+0x004] NextPrefixTree   : 0xe14e3380 [Type: _UNICODE_PREFIX_TABLE_ENTRY *]
    [+0x008] CaseMatch        : 0xe1636b80 [Type: _UNICODE_PREFIX_TABLE_ENTRY *]
    [+0x00c] Links            [Type: _RTL_SPLAY_LINKS]
    [+0x018] Prefix           : 0xe1636b70 : "\lsass" [Type: _UNICODE_STRING *]
1: kd> dx -id 0,0,89429250 -r1 (*((Npfs!_RTL_SPLAY_LINKS *)0xe1636b8c))
(*((Npfs!_RTL_SPLAY_LINKS *)0xe1636b8c))                 [Type: _RTL_SPLAY_LINKS]
    [+0x000] Parent           : 0xe1636b8c [Type: _RTL_SPLAY_LINKS *]
    [+0x004] LeftChild        : 0xe16bf334 [Type: _RTL_SPLAY_LINKS *]
    [+0x008] RightChild       : 0xe13ee5f4 [Type: _RTL_SPLAY_LINKS *]

1: kd> dt Npfs!_FCB 0xe1636b80-48
   +0x000 NodeTypeCode     : 0x4 ''
   +0x004 ParentDcbLinks   : _LIST_ENTRY [ 0xe13ee5a4 - 0xe16bf2e4 ]
   +0x00c ParentDcb        : 0xe14e3338 _FCB
   +0x010 Vcb              : (null)
   +0x014 OpenCount        : 2
   +0x018 ServerOpenCount  : 2
   +0x01c SecurityDescriptor : 0xe13e02e8 Void
   +0x020 Specific         : __unnamed
   +0x038 FullFileName     : _UNICODE_STRING "\lsass"
   +0x040 LastFileName     : _UNICODE_STRING "lsass"
   +0x048 PrefixTableEntry : _UNICODE_PREFIX_TABLE_ENTRY

第四部分:NpCreateClientEnd

     if (Fcb->NodeTypeCode == NPFS_NTC_FCB) {

            DebugTrace(0, Dbg, "Create client end named pipe, Fcb = %08lx\n", Fcb );

            //
            //  If the server has no handles open, then pretend that
            //  the pipe name doesn't exist.
            //

            if (Fcb->ServerOpenCount == 0) {

                Status = STATUS_OBJECT_NAME_NOT_FOUND;

            } else {

                Irp->IoStatus = NpCreateClientEnd (Fcb,
                                                   FileObject,
                                                   DesiredAccess,
                                                   IrpSp->Parameters.Create.SecurityContext->SecurityQos,
                                                   IrpSp->Parameters.Create.SecurityContext->AccessState,
                                                   (KPROCESSOR_MODE)(FlagOn(IrpSp->Flags, SL_FORCE_ACCESS_CHECK) ?
                                                                 UserMode : Irp->RequestorMode),
                                                   Irp->Tail.Overlay.Thread,
                                                   &DeferredList);


1: kd> t
Breakpoint 0 hit
Npfs!NpCreateClientEnd:
baaec874 55              push    ebp
1: kd> kc
 #
00 Npfs!NpCreateClientEnd
01 Npfs!NpFsdCreate
02 nt!IofCallDriver
03 nt!IopParseDevice
04 nt!ObpLookupObjectName
05 nt!ObOpenObjectByName
06 nt!IopCreateFile
07 nt!IoCreateFile
08 nt!NtCreateFile
09 nt!_KiSystemService
0a SharedUserData!SystemCallStub
0b ntdll!NtCreateFile
0c kernel32!CreateFileW
0d RPCRT4!NMP_Open
0e RPCRT4!OSF_CCONNECTION::TransOpen
0f RPCRT4!OSF_CCONNECTION::OpenConnectionAndBind
10 RPCRT4!OSF_CCALL::BindToServer
11 RPCRT4!OSF_BINDING_HANDLE::AllocateCCall
12 RPCRT4!OSF_BINDING_HANDLE::NegotiateTransferSyntax
13 RPCRT4!I_RpcGetBufferWithObject
14 RPCRT4!I_RpcGetBuffer
15 RPCRT4!NdrGetBuffer
16 RPCRT4!NdrClientCall2
17 ADVAPI32!LsarOpenPolicy2
18 ADVAPI32!LsaOpenPolicy
19 services!ScOpenPolicy
1a services!ScGetAccountDomainInfo
1b services!ScInitServiceAccount
1c services!SvcctrlMain
1d services!main
1e services!mainCRTStartup
1f kernel32!BaseProcessStart


1: kd> dv
            Fcb = 0xe1636b38
     FileObject = 0x8978b348
  DesiredAccess = 0x12019f
    SecurityQos = 0x89878708
    AccessState = 0x89878670
  RequestorMode = 0n1 ''
     UserThread = 0x8961a268
   DeferredList = 0xbab18a0c [ 0xbab18a0c - 0xbab18a0c ]
     Privileges = 0x00000008
           Iosb = struct _IO_STATUS_BLOCK
           Name = ""
  AccessGranted = 0x70 'p'
  GrantedAccess = 0xe1636b38
1: kd> dx -id 0,0,89429250 -r1 ((Npfs!_FCB *)0xe1636b38)
((Npfs!_FCB *)0xe1636b38)                 : 0xe1636b38 [Type: _FCB *]
    [+0x000] NodeTypeCode     : 0x4 [Type: unsigned char]
    [+0x004] ParentDcbLinks   [Type: _LIST_ENTRY]
    [+0x00c] ParentDcb        : 0xe14e3338 [Type: _FCB *]
    [+0x010] Vcb              : 0x0 [Type: _VCB *]
    [+0x014] OpenCount        : 0x2 [Type: unsigned long]
    [+0x018] ServerOpenCount  : 0x2 [Type: unsigned long]
    [+0x01c] SecurityDescriptor : 0xe13e02e8 [Type: void *]
    [+0x020] Specific         [Type: __unnamed]
    [+0x038] FullFileName     : "\lsass" [Type: _UNICODE_STRING]
    [+0x040] LastFileName     : "lsass" [Type: _UNICODE_STRING]
    [+0x048] PrefixTableEntry [Type: _UNICODE_PREFIX_TABLE_ENTRY]


   +0x020 Specific         : __unnamed
      +0x000 Dcb              : __unnamed
         +0x000 NotifyFullQueue  : _LIST_ENTRY
         +0x008 NotifyPartialQueue : _LIST_ENTRY
         +0x010 ParentDcbQueue   : _LIST_ENTRY
      +0x000 Fcb              : __unnamed
         +0x000 MaximumInstances : Uint4B
         +0x004 NamedPipeConfiguration : Pos 0, 16 Bits
         +0x004 NamedPipeType    : Pos 16, 16 Bits
         +0x008 DefaultTimeOut   : _LARGE_INTEGER
         +0x010 CcbQueue         : _LIST_ENTRY

    Links = Fcb->Specific.Fcb.CcbQueue.Flink;

    while (1) {

        if (Links == &Fcb->Specific.Fcb.CcbQueue) {
            Iosb.Status = STATUS_PIPE_NOT_AVAILABLE;
            return Iosb;
        }

        Ccb = CONTAINING_RECORD (Links, CCB, CcbLinks);

        if (Ccb->NamedPipeState == FILE_PIPE_LISTENING_STATE) {
            break;
        }

1: kd> dd 0xe1636b38
e1636b38  00000004 e13ee5a4 e16bf2e4 e14e3338
e1636b48  00000000 00000002 00000002 e13e02e8
e1636b58  ffffffff 00010002 fff85ee0 ffffffff
e1636b68  e1636320 e13ed638 000e000c 89503220
e1636b78  000c000a 89503222 00020801 e14e3380
e1636b88  e1636b80 e1636b8c e16bf334 e13ee5f4
e1636b98  e1636b70 00000000 624b7cb7 898d9250
e1636ba8  0c0e060f 46506343 0044005c 00760065


1: kd> dt npfs!ccb  e1636320-10
   +0x000 NodeTypeCode     : 0x6 ''
   +0x001 NamedPipeState   : 0x2 ''
   +0x002 ReadCompletionMode : [2] __unnamed
   +0x004 SecurityQos      : _SECURITY_QUALITY_OF_SERVICE
   +0x010 CcbLinks         : _LIST_ENTRY [ 0xe13ed638 - 0xe1636b68 ]
   +0x018 Fcb              : 0xe1636b38 _FCB
   +0x01c FileObject       : [2] (null)
   +0x024 ClientProcess    : (null)
   +0x028 ClientInfo       : (null)
   +0x02c NonpagedCcb      : 0x8947c6a0 _NONPAGED_CCB
   +0x030 DataQueue        : [2] _DATA_QUEUE
   +0x070 SecurityClientContext : (null)
   +0x074 ListeningQueue   : _LIST_ENTRY [ 0x898442e8 - 0x898442e8 ]

1: kd> dt _irp 0x898442e8-58
GDI32!_IRP
   +0x000 Type             : 0n6
   +0x002 Size             : 0x94
   +0x004 MdlAddress       : (null)
   +0x008 Flags            : 0x800
   +0x00c AssociatedIrp    : __unnamed
   +0x010 ThreadListEntry  : _LIST_ENTRY [ 0x89848480 - 0x899bf710 ]
   +0x018 IoStatus         : _IO_STATUS_BLOCK
   +0x020 RequestorMode    : 1 ''
   +0x021 PendingReturned  : 0 ''
   +0x022 StackCount       : 1 ''
   +0x023 CurrentLocation  : 1 ''
   +0x024 Cancel           : 0 ''
   +0x025 CancelIrql       : 0 ''
   +0x026 ApcEnvironment   : 0 ''
   +0x027 AllocationFlags  : 0xc ''
   +0x028 UserIosb         : 0x00ae02b8 _IO_STATUS_BLOCK
   +0x02c UserEvent        : (null)
   +0x030 Overlay          : __unnamed
   +0x038 CancelRoutine    : (null)
   +0x03c UserBuffer       : (null)
   +0x040 Tail             : __unnamed


   +0x040 Tail             : __unnamed
      +0x000 Overlay          : __unnamed
         +0x000 DeviceQueueEntry : _KDEVICE_QUEUE_ENTRY
         +0x000 DriverContext    : [4] Ptr32 Void
         +0x010 Thread           : Ptr32 _ETHREAD
         +0x014 AuxiliaryBuffer  : Ptr32 Char
         +0x018 ListEntry        : _LIST_ENTRY
         +0x020 CurrentStackLocation : Ptr32 _IO_STACK_LOCATION
         +0x020 PacketType       : Uint4B
         +0x024 OriginalFileObject : Ptr32 _FILE_OBJECT


1: kd> dd 0x898442e8-58
89844290  00940006 00000000 00000800 00000000
898442a0  89848480 899bf710 00000000 00000000
898442b0  01010001 0c000000 00ae02b8 00000000
898442c0  00000000 00ae02b8 00000000 00000000
898442d0  00000000 00000000 00000000 00000000
898442e0  89848268 00000000 bab18a0c bab18a0c
898442f0  89844300 8946f068


    if (!NT_SUCCESS(Iosb.Status = NpSetConnectedPipeState (Ccb,
                                                           FileObject,
                                                           DeferredList))) {

    //
    //  And complete any listening waiters
    //

    while (!IsListEmpty (&Ccb->ListeningQueue)) {
        PLIST_ENTRY Links;

        Links = RemoveHeadList (&Ccb->ListeningQueue);

        LocalIrp = CONTAINING_RECORD (Links, IRP, Tail.Overlay.ListEntry);

        //
        // Remove the cancel routine and detect if cancel is active. If it is leave the IRP to the
        // cancel routine.

        if (IoSetCancelRoutine (LocalIrp, NULL) != NULL) {
            NpDeferredCompleteRequest (LocalIrp, STATUS_SUCCESS, DeferredList);
        } else {
            InitializeListHead (&LocalIrp->Tail.Overlay.ListEntry);
        }
    }

1: kd> gu
Breakpoint 9 hit
Npfs!NpSetConnectedPipeState:
baaf38f2 55              push    ebp
1: kd> dv
             Ccb = 0xe1636310
ClientFileObject = 0x8978b348
    DeferredList = 0xbab18a0c [ 0xbab18a0c - 0xbab18a0c ]


1: kd> dv
            Fcb = 0x0012019b
     FileObject = 0x8978b348
  DesiredAccess = 0x12019f
    SecurityQos = 0x89878708
    AccessState = 0x89878601
  RequestorMode = 0n1 ''
     UserThread = 0x8961a268
   DeferredList = 0xbab18a0c [ 0x898442e8 - 0x898442e8 ]

#define FILE_PIPE_CLIENT_END            0x00000000
#define FILE_PIPE_SERVER_END            0x00000001

    Ccb->FileObject[FILE_PIPE_CLIENT_END] = ClientFileObject;

    NpSetFileObject (ClientFileObject,
                     Ccb,
                     NonpagedCcb,
                     FILE_PIPE_CLIENT_END);
 

1: kd> dx -id 0,0,89429250 -r1 ((Npfs!_CCB *)0xe1636310)
((Npfs!_CCB *)0xe1636310)                 : 0xe1636310 [Type: _CCB *]
    [+0x000] NodeTypeCode     : 0x6 [Type: unsigned char]
    [+0x001] NamedPipeState   : 0x3 [Type: unsigned char]
    [+0x002] ReadCompletionMode [Type: __unnamed [2]]
    [+0x004] SecurityQos      [Type: _SECURITY_QUALITY_OF_SERVICE]
    [+0x010] CcbLinks         [Type: _LIST_ENTRY]
    [+0x018] Fcb              : 0xe1636b38 [Type: _FCB *]
    [+0x01c] FileObject       [Type: _FILE_OBJECT * [2]]
    [+0x024] ClientProcess    : 0x89429250 [Type: void *]
    [+0x028] ClientInfo       : 0x0 [Type: _CLIENT_INFO *]
    [+0x02c] NonpagedCcb      : 0x8947c6a0 [Type: _NONPAGED_CCB *]
    [+0x030] DataQueue        [Type: _DATA_QUEUE [2]]
    [+0x070] SecurityClientContext : 0x0 [Type: _SECURITY_CLIENT_CONTEXT *]
    [+0x074] ListeningQueue   [Type: _LIST_ENTRY]
1: kd> dx -id 0,0,89429250 -r1 (*((Npfs!_FILE_OBJECT * (*)[2])0xe163632c))
(*((Npfs!_FILE_OBJECT * (*)[2])0xe163632c))                 [Type: _FILE_OBJECT * [2]]
    [0]              :
0x8978b348 [Type: _FILE_OBJECT *]
    [1]              : 0x8946f068 [Type: _FILE_OBJECT *]

    Ccb->ClientInfo = NULL;
    Ccb->ClientProcess = IoThreadToProcess (UserThread);

    //
    //  And set our return status
    //

    Iosb.Status = STATUS_SUCCESS;
    Iosb.Information = FILE_OPENED;

//
// Define the I/O status information return values for NtCreateFile/NtOpenFile
//

#define FILE_SUPERSEDED                 0x00000000
#define FILE_OPENED                     0x00000001


1: kd> dx -id 0,0,89429250 -r1 (*((Npfs!_IO_STATUS_BLOCK *)0xbab189c0))
(*((Npfs!_IO_STATUS_BLOCK *)0xbab189c0))                 [Type: _IO_STATUS_BLOCK]
    [+0x000] Status           : 1 [Type: long]
    [+0x000] Pointer          : 0x1 [Type: void *]
    [+0x004] Information      : 0xe1636384 [Type: unsigned long]


    NpCompleteDeferredIrps (&DeferredList);

    FsRtlExitFileSystem();

    NpCompleteRequest (Irp, Status);

    return Status;
}

VOID
FORCEINLINE
NpCompleteDeferredIrps (
    IN PLIST_ENTRY DeferredList
    )
{
    PIRP Irp;
    PLIST_ENTRY Entry, NextEntry;

    Entry = DeferredList->Flink;
    while (Entry != DeferredList) {
        Irp = CONTAINING_RECORD (Entry, IRP, Tail.Overlay.ListEntry);
        NextEntry = Entry->Flink;
        NpCompleteRequest (Irp, Irp->IoStatus.Status);
        Entry = NextEntry;
    }
}


#define NpCompleteRequest(IRP,STATUS) FsRtlCompleteRequest( (IRP), (STATUS) );

#define FsRtlCompleteRequest(IRP,STATUS) {         \
    (IRP)->IoStatus.Status = (STATUS);             \
    IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
}


1: kd> p
Npfs!NpFsdCreate+0x23e:
baaecde4 8b18            mov     ebx,dword ptr [eax]
1: kd> p
Npfs!NpFsdCreate+0x240:
baaecde6 8d48a8          lea     ecx,[eax-58h]
1: kd> r
eax=898442e8


1: kd> p
Npfs!NpFsdCreate+0x245:
baaecdeb ff1520a0aeba    call    dword ptr [Npfs!_imp_IofCompleteRequest (baaea020)]
1: kd> t
nt!IofCompleteRequest:
80a241a8 ff250488b180    jmp     dword ptr [nt!pIofCompleteRequest (80b18804)]
1: kd> kc
 #
00 nt!IofCompleteRequest
01 Npfs!NpFsdCreate
02 nt!IofCallDriver
03 nt!IopParseDevice
04 nt!ObpLookupObjectName
05 nt!ObOpenObjectByName
06 nt!IopCreateFile
07 nt!IoCreateFile
08 nt!NtCreateFile
09 nt!_KiSystemService
0a SharedUserData!SystemCallStub
0b ntdll!NtCreateFile
0c kernel32!CreateFileW
0d RPCRT4!NMP_Open
0e RPCRT4!OSF_CCONNECTION::TransOpen
0f RPCRT4!OSF_CCONNECTION::OpenConnectionAndBind
10 RPCRT4!OSF_CCALL::BindToServer
11 RPCRT4!OSF_BINDING_HANDLE::AllocateCCall
12 RPCRT4!OSF_BINDING_HANDLE::NegotiateTransferSyntax
13 RPCRT4!I_RpcGetBufferWithObject
14 RPCRT4!I_RpcGetBuffer
15 RPCRT4!NdrGetBuffer
16 RPCRT4!NdrClientCall2
17 ADVAPI32!LsarOpenPolicy2
18 ADVAPI32!LsaOpenPolicy
19 services!ScOpenPolicy
1a services!ScGetAccountDomainInfo
1b services!ScInitServiceAccount
1c services!SvcctrlMain
1d services!main
1e services!mainCRTStartup
1f kernel32!BaseProcessStart
1: kd> dv
            Irp = 0x00000001
  PriorityBoost = 0n12 ''

1: kd> p
nt!IopfCompleteRequest+0xa:
80a26a0a 8a4622          mov     al,byte ptr [esi+22h]
1: kd> p
nt!IopfCompleteRequest+0xd:
80a26a0d 33db            xor     ebx,ebx
1: kd> r
eax=89844201 ebx=bab18a0c ecx=89844290 edx=00000001 esi=89844290 edi=00000000
eip=80a26a0d esp=bab189d8 ebp=bab189f0 iopl=0         nv up ei ng nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000282
nt!IopfCompleteRequest+0xd:
80a26a0d 33db            xor     ebx,ebx
1: kd> dt _irp 89844290
GDI32!_IRP
   +0x000 Type             : 0n6
   +0x002 Size             : 0x94
   +0x004 MdlAddress       : (null)
   +0x008 Flags            : 0x800
   +0x00c AssociatedIrp    : __unnamed
   +0x010 ThreadListEntry  : _LIST_ENTRY [ 0x89848480 - 0x899bf710 ]
   +0x018 IoStatus         : _IO_STATUS_BLOCK
   +0x020 RequestorMode    : 1 ''
   +0x021 PendingReturned  : 0 ''
   +0x022 StackCount       : 1 ''
   +0x023 CurrentLocation  : 1 ''
   +0x024 Cancel           : 0 ''
   +0x025 CancelIrql       : 0 ''
   +0x026 ApcEnvironment   : 0 ''
   +0x027 AllocationFlags  : 0xc ''
   +0x028 UserIosb         : 0x00ae02b8 _IO_STATUS_BLOCK
   +0x02c UserEvent        : (null)
   +0x030 Overlay          : __unnamed
   +0x038 CancelRoutine    : (null)
   +0x03c UserBuffer       : (null)
   +0x040 Tail             : __unnamed


   ASSERT( !Irp->CancelRoutine );

1: kd> p
nt!IopfCompleteRequest+0x2b:
80a26a2b 395e38          cmp     dword ptr [esi+38h],ebx
1: kd> r
eax=89844202 ebx=00000000 ecx=89844290 edx=00000001 esi=89844290 edi=00000000
eip=80a26a2b esp=bab189d4 ebp=bab189f0 iopl=0         nv up ei pl zr na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000246
nt!IopfCompleteRequest+0x2b:
80a26a2b 395e38          cmp     dword ptr [esi+38h],ebx ds:0023:898442c8=00000000
1: kd> dt _irp 89844290
GDI32!_IRP
   +0x000 Type             : 0n6
   +0x002 Size             : 0x94
   +0x004 MdlAddress       : (null)
   +0x008 Flags            : 0x800
   +0x00c AssociatedIrp    : __unnamed
   +0x010 ThreadListEntry  : _LIST_ENTRY [ 0x89848480 - 0x899bf710 ]
   +0x018 IoStatus         : _IO_STATUS_BLOCK
   +0x020 RequestorMode    : 1 ''
   +0x021 PendingReturned  : 0 ''
   +0x022 StackCount       : 1 ''
   +0x023 CurrentLocation  : 1 ''
   +0x024 Cancel           : 0 ''
   +0x025 CancelIrql       : 0 ''
   +0x026 ApcEnvironment   : 0 ''
   +0x027 AllocationFlags  : 0xc ''
   +0x028 UserIosb         : 0x00ae02b8 _IO_STATUS_BLOCK
   +0x02c UserEvent        : (null)
   +0x030 Overlay          : __unnamed
   +0x038 CancelRoutine    : (null)
   +0x03c UserBuffer       : (null)
   +0x040 Tail             : __unnamed

1: kd> dd 89844290
89844290  00940006 00000000 00000800 00000000
898442a0  89848480 899bf710 00000000 00000000
898442b0  01010001 0c000000 00ae02b8 00000000
898442c0  00000000 00ae02b8 00000000 00000000
898442d0  00000000 00000000 00000000 00000000
898442e0  89848268 00000000 bab18a0c bab18a0c
898442f0  89844300 8946f068 00000000 00000000
89844300  0105000d 00000000 00000000 00110008

1: kd> dt kapc 89844290+40
GDI32!KAPC
   +0x000 Type             : 0n0
   +0x002 Size             : 0n0
   +0x004 Spare0           : 0
   +0x008 Thread           : (null)
   +0x00c ApcListEntry     : _LIST_ENTRY [ 0x0 - 0x89848268 ]
   +0x014 KernelRoutine    : (null)
   +0x018 RundownRoutine   : 0xbab18a0c     void  +ffffffffbab18a0c
   +0x01c NormalRoutine    : 0xbab18a0c     void  +ffffffffbab18a0c
   +0x020 NormalContext    : 0x89844300 Void
   +0x024 SystemArgument1  : 0x8946f068 Void
   +0x028 SystemArgument2  : (null)
   +0x02c ApcStateIndex    : 0 ''
   +0x02d ApcMode          : 0 ''
   +0x02e Inserted         : 0 ''

   +0x040 Tail             : __unnamed
      +0x000 Overlay          : __unnamed
         +0x000 DeviceQueueEntry : _KDEVICE_QUEUE_ENTRY
         +0x000 DriverContext    : [4] Ptr32 Void    
         +0x010 Thread           : Ptr32 _ETHREAD                89848268
         +0x014 AuxiliaryBuffer  : Ptr32 Char
         +0x018 ListEntry        : _LIST_ENTRY
         +0x020 CurrentStackLocation : Ptr32 _IO_STACK_LOCATION
         +0x020 PacketType       : Uint4B
         +0x024 OriginalFileObject : Ptr32 _FILE_OBJECT            8946f068

1: kd> dd 89844290
89844290  00940006 00000000 00000800 00000000
898442a0  89848480 899bf710 00000000 00000000
898442b0  01010001 0c000000 00ae02b8 00000000
898442c0  00000000 00ae02b8 00000000 00000000
898442d0  00000000 00000000 00000000 00000000
898442e0  89848268 00000000 bab18a0c bab18a0c
898442f0  89844300 8946f068

1: kd> dt file_object 8946f068
GDI32!FILE_OBJECT
   +0x000 Type             : 0n5
   +0x002 Size             : 0n112
   +0x004 DeviceObject     : 0x895b5038 _DEVICE_OBJECT
   +0x008 Vpb              : (null)
   +0x00c FsContext        : 0xe1636311 Void
   +0x010 FsContext2       : 0x8947c6a0 Void
   +0x014 SectionObjectPointer : (null)
   +0x018 PrivateCacheMap  : 0x00000001 Void
   +0x01c FinalStatus      : 0n0
   +0x020 RelatedFileObject : (null)
   +0x024 LockOperation    : 0 ''
   +0x025 DeletePending    : 0 ''
   +0x026 ReadAccess       : 0 ''
   +0x027 WriteAccess      : 0 ''
   +0x028 DeleteAccess     : 0 ''
   +0x029 SharedRead       : 0 ''
   +0x02a SharedWrite      : 0 ''
   +0x02b SharedDelete     : 0 ''
   +0x02c Flags            : 0x40080
   +0x030 FileName         : _UNICODE_STRING "\lsass"
   +0x038 CurrentByteOffset : _LARGE_INTEGER 0x0
   +0x040 Waiters          : 0
   +0x044 Busy             : 0
   +0x048 LastLock         : (null)
   +0x04c Lock             : _KEVENT
   +0x05c Event            : _KEVENT
   +0x06c CompletionContext : 0xe13df1e8 _IO_COMPLETION_CONTEXT
1: kd> dt npfs!ccb 0xe1636310
   +0x000 NodeTypeCode     : 0x6 ''
   +0x001 NamedPipeState   : 0x3 ''
   +0x002 ReadCompletionMode : [2] __unnamed
   +0x004 SecurityQos      : _SECURITY_QUALITY_OF_SERVICE
   +0x010 CcbLinks         : _LIST_ENTRY [ 0xe13ed638 - 0xe1636b68 ]
   +0x018 Fcb              : 0xe1636b38 _FCB
   +0x01c FileObject       : [2] 0x8978b348 _FILE_OBJECT
   +0x024 ClientProcess    : 0x89429250 Void
   +0x028 ClientInfo       : (null)
   +0x02c NonpagedCcb      : 0x8947c6a0 _NONPAGED_CCB
   +0x030 DataQueue        : [2] _DATA_QUEUE
   +0x070 SecurityClientContext : (null)
   +0x074 ListeningQueue   : _LIST_ENTRY [ 0xe1636384 - 0xe1636384 ]
1: kd> dx -id 0,0,89429250 -r1 (*((Npfs!_FILE_OBJECT * (*)[2])0xe163632c))
(*((Npfs!_FILE_OBJECT * (*)[2])0xe163632c))                 [Type: _FILE_OBJECT * [2]]
    [0]              : 0x8978b348 [Type: _FILE_OBJECT *]
    [1]              : 0x8946f068 [Type: _FILE_OBJECT *]
1: kd> dx -id 0,0,89429250 -r1 (*((Npfs!_LIST_ENTRY *)0xe1636384))
(*((Npfs!_LIST_ENTRY *)0xe1636384))                 [Type: _LIST_ENTRY]
    [+0x000] Flink            : 0xe1636384 [Type: _LIST_ENTRY *]
    [+0x004] Blink            : 0xe1636384 [Type: _LIST_ENTRY *]


1: kd> !THREAD 89848268
THREAD 89848268  Cid 0204.0254  Teb: 7ffd6000 Win32Thread: 00000000 WAIT: (WrQueue) UserMode Non-Alertable
    895f3b08  QueueObject
    898482e0  NotificationTimer
IRP List:
    899bf700: (0006,0094) Flags: 00000800  Mdl: 00000000
    89844290: (0006,0094) Flags: 00000800  Mdl: 00000000
Not impersonating
DeviceMap                 e10003d8
Owning Process            898d9250       Image:         lsass.exe
Attached Process          N/A            Image:         N/A
Wait Start TickCount      274648358      Ticks: 10 (0:00:00:00.156)
Context Switch Count      2              IdealProcessor: 1             
UserTime                  00:00:00.000
KernelTime                00:00:00.015
Win32 Start Address RPCRT4!ThreadStartRoutine (0x77c04bb7)
Stack Init baac8000 Current baac7c38 Base baac8000 Limit baac5000 Call 00000000
Priority 9 BasePriority 9 PriorityDecrement 0 IoPriority 0 PagePriority 0
ChildEBP RetAddr  Args to Child              
baac7c50 80a440eb 89848308 89848268 895f3b08 nt!KiSwapContext+0x26 (FPO: [Uses EBP] [0,0,4]) [d:\srv03rtm\base\ntos\ke\i386\ctxswap.asm @ 139]
baac7c88 80a38894 baac7d58 00000000 80c652f4 nt!KiSwapThread+0x627 (FPO: [Non-Fpo]) (CONV: fastcall) [d:\srv03rtm\base\ntos\ke\thredsup.c @ 2000]
baac7cb8 80c653d0 00000001 00000001 baac7cd8 nt!KeRemoveQueue+0x2f2 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\ke\queueobj.c @ 533]
baac7d3c 80afbcb2 00000704 00c1ff04 00c1feec nt!NtRemoveIoCompletion+0xdc (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\io\iomgr\complete.c @ 597]
baac7d3c 7ffe0304 00000704 00c1ff04 00c1feec nt!_KiSystemService+0x13f (FPO: [0,3] TrapFrame @ baac7d64) (CONV: cdecl) [d:\srv03rtm\base\ntos\ke\i386\trap.asm @ 1328]
00c1fed4 00000000 00000000 00000000 00000000 SharedUserData!SystemCallStub+0x4 (FPO: [0,0,0])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/75849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【软件测试】bug 篇

本章思维导图: 1. 软件测试的生命周期 软件测试贯穿于整个软件的生命周期 流程阶段需求分析测试计划测试设计/开发测试执行测试评估上线运行维护具体工作内容1. 阅读需求文档 2. 标记可测试需求 3. 确定测试类型1. 制定测试范围 2. 选择测试工具 3. 分配资源1. 编写…

「Unity3D」图片导入选项取消Read/Write,就无法正确显示导入大小,以及Addressable打包无法正确显示的问题

如果在Edit -> Project Settings -> Editor中的“Load texture data on demand”勾选,就会让图片导入设置中,不勾选Read/Write,就无法正确显示纹理的大小数字。 更进一步的问题是,使用Addressable打包的时候, 如…

《MySQL从入门到精通》

文章目录 《MySQL从入门到精通》1. 基础-SQL通用语法及分类2. 基础-SQL-DDL-数据库操作3. 基础-SQL-DDL-表操作-创建&查询4. 基础-SQL-DDL-数据类型及案例4.1 数值类型4.2 字符串类型4.3 时间和日期类型 5. 基础-SQL-DDL-表操作-修改&删除5.1 DDL-表操作-修改5.2 DDL-表…

Vccaux_IO在DDR3接口中的作用

一、Vccaux_IO在DDR3接口中的作用 1.vccaux_io通常为FPGA的IO bank的辅助电源,用于支持特定电压的IO标准 2.在DDR3接口中,FPGA的IO bank需要DDR3芯片的电压(1.5v/1.35v)匹配 3.Vccaux_IO用于为FPGA的DDR3接口I/O Bank供电,其电压值、噪声和稳…

深入理解Apache Kafka

引言 在现代分布式系统架构中,中间件扮演着至关重要的角色,它作为系统各组件之间的桥梁,负责处理数据传递、消息通信、负载均衡等关键任务。在众多中间件解决方案中,Apache Kafka凭借其高吞吐量、低延迟和可扩展性,已…

【NLP】 21. Transformer整体流程概述 Encoder 与 Decoder架构对比

1. Transformer 整体流程概述 Transformer 模型的整个处理流程可以概括为从自注意力(Self-Attention)到多头注意力,再加上残差连接、层归一化、堆叠多层的结构。其核心思想是利用注意力机制对输入进行并行计算,从而避免传统 RNN …

路由器端口映射的意思、使用场景、及内网ip让公网访问常见问题和解决方法

一、端口映射是什么意思 端口映射是将内网主机的IP地址端口映射到公网中,内部机器提供相应的互联网服务。当异地用户访问该这个端口时,会自动将请求映射到对应局域网内部的机器上。 二、端口映射常见使用场景 1,远程访问需求。当有…

GEO全域优化白皮书:盈达科技如何打造AI生态中的认知护城河

副标题:让内容被AI优先引用,占领生成式引擎的“主屏入口” 一、GEO:生成式引擎时代的内容占位权之战 随着ChatGPT、Kimi、DeepSeek等生成式AI快速成为信息获取的主流方式,搜索逻辑正在根本性改变:从“网页排名”转向“…

如何用DeepSeek大模型提升MySQL DBA工作效率?实战案例解析

如何用DeepSeek大模型提升MySQL DBA工作效率?实战案例解析 MySQL DBA(数据库管理员)的工作涉及数据库监控、SQL优化、故障排查、备份恢复等复杂任务,传统方式依赖手动操作和经验判断,效率较低。而DeepSeek大模型可以结…

系统设计思维的讨论

我们经常说自己熟悉了spring,能够搭建起一个项目基本框架,并且在此之上进行开发,用户or客户提出需求碰到不会的百度找找就可以实现。干个四五年下一份工作就去面试架构师了,运气好一些可能在中小公司真的找到一份架构师、技术负责…

项目部署-(二)Linux下SpringBoot项目自动部署

一、项目部署架构 二、项目部署环境 192.168.138.100(服务器A): -Nginx :部署前端项目、配置反向代理 -MySQL:主从复制结构中的主库 192.168.138.101(服务器B): -JDK:运行Java项目 -Git:版本控制工具 -Maven:项目构建…

【LeetCode 热题 100】哈希 系列

📁1. 两数之和 本题就是将通过两层遍历优化而成的,为什么需要两层遍历,因为遍历 i 位置时,不知道i-1之前的元素是多少,如果我们知道了,就可以通过两数相加和target比较即可。 因为本题要求返回下标&#xf…

【Kubernetes基础】--查阅笔记1

目录 Kubernetes 是什么为什么要用 KubernetesKubernetes 概念MasterNodePodLabelReplication ControllerDeploymentHorizontal Pod AutoscalerStatefulSetService服务发现机制 JobVolumePersistent VolumeNamespaceConfigmap Kubernetes 是什么 Kubernetes是一个开放的开发平…

卷积神经网络CNN到底在卷些什么?

来源: 卷积神经网络(CNN)到底卷了啥?8分钟带你快速了解!_哔哩哔哩_bilibili卷积神经网络(CNN)到底卷了啥?8分钟带你快速了解!共计2条视频,包括:卷…

Axios 的 POST 请求:QS 处理数据的奥秘与使用场景解析

在现代前端开发中,Axios 已经成为了进行 HTTP 请求的首选库之一,它的简洁易用和强大功能深受开发者喜爱。当使用 Axios 进行 POST 请求时,我们常常会遇到一个问题:是否需要使用 QS 库来处理请求数据?什么时候又可以不用…

java面试题带答案2025最新整理

文章目录 一、java面试题集合框架1. 请简要介绍 Java 集合框架的体系结构2. ArrayList 和 LinkedList 的区别是什么3. HashMap 的工作原理是什么,它在 JDK 7 和 JDK 8 中有哪些不同4. 如何解决 HashMap 的线程安全问题5. TreeSet 是如何保证元素有序的 二、java面试…

4.B-树

一、常见的查找方式 顺序查找 O(N) 二分查找 O(logN)(要求有序和随机访问) 二叉搜索树 O(N) 平衡二叉搜索树(AVL树和红黑树) O(logN) 哈希 O(1) 考虑效率和要求而言,正常选用 平衡二叉搜索树 和 哈希 作为查找方式。 但这两种结构适合用于…

CTF--shell

一、原题 (1)提示: $poc"a#s#s#e#r#t";$poc_1explode("#",$poc);$poc_2$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5]; $poc_2($_GET[s]) (2)原网页:一片空白什么都…

基于51单片机的正负5V数字电压表( proteus仿真+程序+设计报告+讲解视频)

基于51单片机的正负5V数字电压表( proteus仿真程序设计报告讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0101 1. 主要功能: 设计一个基于51单片机数字电压表 1、能够…

hive数仓要点总结

1.OLTP和OLAP区别 OLTP(On-Line Transaction Processing)即联机事务处理,也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用…