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

news2025/4/15 16:08:12


第一部分:

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.coloradmin.cn/o/2334701.html

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

相关文章

基于PySide6与pycatia的CATIA绘图比例智能调节工具开发全解析

引言:工程图纸自动化处理的技术革新 在机械设计领域,CATIA图纸的比例调整是高频且重复性极强的操作。传统手动调整方式效率低下且易出错。本文基于PySide6+pycatia技术栈,提出一种支持智能比例匹配、实时视图控制、异常自处理的图纸批处理方案,其核心突破体现在: ​操作效…

STM32硬件IIC+DMA驱动OLED显示——释放CPU资源,提升实时性

目录 前言 一、软件IIC与硬件IIC 1、软件IIC 2、硬件IIC 二、STM32CubeMX配置KEIL配置 三、OLED驱动示例 1、0.96寸OLED 2、OLED驱动程序 3、运用示例 4、效果展示 总结 前言 0.96寸OLED屏是一个很常见的显示模块,其驱动方式在用采IIC通讯时,常用软件IIC…

泛型的二三事

泛型(Generics)是Java语言的一个重要特性,它允许在定义类、接口和方法时使用类型参数(Type Parameters),从而实现类型安全的代码重用。泛型在Java 5中被引入,极大地增强了代码的灵活性和安全性。…

编程思想——FP、OOP、FRP、AOP、IOC、DI、MVC、DTO、DAO

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

【区块链安全 | 第三十九篇】合约审计之delegatecall(一)

文章目录 外部调用函数calldelegatecallcall 与 delegatecall 的区别示例部署后初始状态调用B.testCall()函数调用B.testDelegatecall()函数区别总结漏洞代码代码审计攻击代码攻击原理解析攻击流程修复建议审计思路外部调用函数 在 Solidity 中,常见的两种底层外部函数调用方…

linux多线(进)程编程——(6)共享内存

前言 话说进程君的儿子经过父亲点播后就开始闭关,它想要开发出一种全新的传音神通。他想,如果两个人的大脑生长到了一起,那不是就可以直接知道对方在想什么了吗,这样不是可以避免通过语言传递照成的浪费吗? 下面就是它…

信息安全管理与评估2021年国赛正式卷答案截图以及十套国赛卷

2021年全国职业院校技能大赛高职组 “信息安全管理与评估”赛项 任务书1 赛项时间 共计X小时。 赛项信息 赛项内容 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 平台搭建与安全设备配置防护 任务1 网络平台搭建 任务2 网络安全设备配置与防护 第二…

高并发秒杀系统设计:关键技术解析与典型陷阱规避

电商、在线票务等众多互联网业务场景中,高并发秒杀活动屡见不鲜。这类活动往往在短时间内会涌入海量的用户请求,对系统架构的性能、稳定性和可用性提出了极高的挑战。曾经,高并发秒杀架构设计让许多开发者望而生畏,然而&#xff0…

微信小程序实战案例 - 餐馆点餐系统 阶段 2 – 购物车

阶段 2 – 购物车(超详细版) 目标 把“加入购物车”做成 全局状态,任何页面都能读写在本地 持久化(关闭小程序后购物车仍在)新建 购物车页:数量增减、总价实时计算、去结算入口打 Git Tag v2.0‑cart 1. …

sql 向Java的映射

优化建议,可以在SQL中控制它的类型 在 MyBatis 中,如果返回值类型设置为 java.util.Map,默认情况下可以返回 多行多列的数据

Visual Studio未能加载相应的Package包弹窗报错

环境介绍: visulal studio 2019 问题描述: 起因:安装vs扩展插件后,重新打开Visual Studio,报了一些列如下的弹窗错误,即使选择不继续显示该错误,再次打开后任然报错; 解决思路&am…

【HD-RK3576-PI】Docker搭建与使用

硬件:HD-RK3576-PI 软件:Linux6.1Ubuntu22.04 1.Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言开发,遵循 Apache 2.0 协议。它可以让开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中,并在任…

【websocket】使用案例( ​JSR 356 标准)

目录 一、JSR 356方式:简单示例 1、引入依赖 2、注册端点扫描器 3、编写通过注解处理生命周期和消息 4、细节解读 5、总结 二、聊天室案例 方案流程 1、引入依赖 2、注册端点扫描器 3、编写一个配置类,读取httpsession 4、编写通过注解处理生…

IS-IS中特殊字段——OL过载

文章目录 OL 过载位 🏡作者主页:点击! 🤖Datacom专栏:点击! ⏰️创作时间:2025年04月13日20点12分 OL 过载位 路由过载 使用 IS-IS 的过载标记来标识过载状态 对设备设置过载标记后&#xff…

【时频谱分析】快速谱峭度

算法配置页面,也可以一键导出结果数据 报表自定义绘制 获取和下载【PHM学习软件PHM源码】的方式 获取方式:Docshttps://jcn362s9p4t8.feishu.cn/wiki/A0NXwPxY3ie1cGkOy08cru6vnvc

Spring Boot 支持的内嵌服务器(Tomcat、Jetty、Undertow、Netty(用于 WebFlux 响应式应用))详解

Spring Boot 支持的内嵌服务器详解 1. 支持的内嵌服务器 Spring Boot 默认支持以下内嵌服务器: Tomcat(默认)JettyUndertowNetty(用于 WebFlux 响应式应用) 2. 各服务器使用示例 (1) Tomcat(默认&#xf…

微软Exchange管理中心全球范围宕机

微软已确认Exchange管理中心(Exchange Admin Center,EAC)发生全球性服务中断,导致管理员无法访问关键管理工具。该故障被标记为关键服务事件(编号EX1051697),对依赖Exchange Online的企业造成广…

基于Qt的串口通信工具

程序介绍 该程序是一个基于Qt的串口通信工具,专用于ESP8266 WiFi模块的AT指令配置与调试。主要功能包括: 1. 核心功能 串口通信:支持串口开关、参数配置(波特率、数据位、停止位、校验位)及数据收发。 AT指令操作&a…

html简易实现推箱子小游戏原理(易上手)

实现效果 使用方向键移动&#xff0c;将橙色箱子推到绿色目标区域&#xff08;黑色块为墙&#xff0c;白色块为可通过区域&#xff0c;蓝球为小人&#xff09; 实现过程 <!DOCTYPE html> <html> <head><title>推箱子小游戏</title><style&g…

字符串与栈和队列-算法小结

字符串 双指针 反转字符串(双指针) 力扣题目链接 void reverseString(vector<char>& s) {for (int i 0, j s.size() - 1; i < s.size()/2; i, j--) {swap(s[i],s[j]);} }反转字符串II 力扣题目链接 遍历字符串的过程中&#xff0c;只要让 i (2 * k)&#…