当前位置: 首页 > news >正文

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])

相关文章:

  • MySQL表的增删改查进阶版
  • Java学习——day29(并发控制高级工具与设计模式)
  • JavaWeb-04-Web后端基础(SpringBootWeb、HTTP协议、分层解耦、IOC和DI)
  • 智慧社区数据可视化中枢平台——Axure全场景交互式大屏解决方案
  • ESP-IDF 开发框架:探索ESP32的强大底层世界
  • 高校智慧能源系统解决方案:推动绿色校园建设的智能化实践
  • 02_通过调用硅基流动平台deepseekapi按输入的标题生成文章
  • 4.3 某箱体上自动涂胶视觉引导功能解析
  • 记一次InternVL3- 2B 8B的部署测验日志
  • C 语言 第八章 文件操作
  • ElMessage
  • Redis 分布式锁实现原理与实战全解析
  • 腾讯云开发+MCP:旅游规划攻略
  • 修改idea/android studio等编辑器快捷注释从当前行开头的反人类行为
  • 车载以太网-TLS
  • 网络基础1
  • intructor库实现可迭代对象输出
  • LangChain高阶技巧:动态配置Runnable组件的原理剖析与实战应用
  • Spring AI高级RAG功能查询重写和查询翻译
  • 掌趣科技前端面试题及参考答案
  • 第78届戛纳电影节开幕,罗伯特·德尼罗领取终身成就奖
  • 俄乌拟在土耳其举行会谈,特朗普:我可能飞过去
  • 白玉兰奖征片综述丨综艺市场破局焕新,多元赛道重塑价值坐标
  • 民企老板被错羁212天续:申请国赔千万余元,要求恢复名誉赔礼道歉
  • 江苏省委社会工作部部长等多人拟在省志愿服务联合会任职
  • 中国科协发声:屡禁不止的奇葩论文再次敲响学风建设警钟