亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? filespy.c

?? 對本程序不隱藏 對其他程序隱藏
?? C
?? 第 1 頁 / 共 5 頁
字號:
    devName = NLGetAndAllocateObjectName( DeviceObject,
                                          &gFileSpyNameBufferLookasideList );

    if (devName == NULL) {

//        SPY_LOG_PRINT( SPYDEBUG_DISPLAY_ATTACHMENT_NAMES,
//                       ("FileSpy!SpyFsNotification:                   Not attaching to %p, insufficient resources.\n",
//                        DeviceObject) );
        return;
    }


//    SPY_LOG_PRINT( SPYDEBUG_DISPLAY_ATTACHMENT_NAMES,
//                   ("FileSpy!SpyFsNotification:                   %s   %p \"%wZ\" (%s)\n",
//                    (FsActive) ? "Activating file system  " : "Deactivating file system",
//                    DeviceObject,
//                    &devName->Name,
//                    GET_DEVICE_TYPE_NAME(DeviceObject->DeviceType)) );

    //
    //  See if we want to ATTACH or DETACH from the given file system.
    //

    if (FsActive) {

        SpyAttachToFileSystemDevice( DeviceObject, devName );

    } else {

        SpyDetachFromFileSystemDevice( DeviceObject );
    }

    //
    //  We're done with name (SpyAttachToFileSystemDevice copies the name to
    //  the device extension) so free it.
    //

    NLFreeNameControl( devName, &gFileSpyNameBufferLookasideList );
}


NTSTATUS
SpyPassThrough (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
)
/*++

Routine Description:

    This routine is the main dispatch routine for the general purpose file
    system driver.  It simply passes requests onto the next driver in the
    stack, which is presumably a disk file system, while logging any
    relevant information if logging is turned on for this DeviceObject.

Arguments:

    DeviceObject - Pointer to device object Filespy attached to the file system
        filter stack for the volume receiving this I/O request.

    Irp - Pointer to the request packet representing the I/O request.

Return Value:

    The function value is the status of the operation.

Note:

    This routine passes the I/O request through to the next driver
    *without* removing itself from the stack (like sfilter) since it could
    want to see the result of this I/O request.

    To remain in the stack, we have to copy the caller's parameters to the
    next stack location.  Note that we do not want to copy the caller's I/O
    completion routine into the next stack location, or the caller's routine
    will get invoked twice.  This is why we NULL out the Completion routine.
    If we are logging this device, we set our own Completion routine.

--*/
{
//    PRECORD_LIST recordList = NULL;
//    KEVENT waitEvent;
    NTSTATUS status;
//    BOOLEAN syncToDispatch;

    ASSERT(IS_FILESPY_DEVICE_OBJECT( DeviceObject ));

    //
    //  If the specified debug level is set, output what operation
    //  we are seeing to the debugger.
    //

//    if (FlagOn( gFileSpyDebugLevel, SPYDEBUG_TRACE_IRP_OPS )) {

//        SpyDumpIrpOperation( TRUE, Irp );
//    }

    //
    //  See if we should log this IRP
    //

/*    if (SHOULD_LOG( DeviceObject )) {

        //
        //  The ControlDevice is opened, so allocate the Record
        //  and log the Irp information if we have the memory.
        //

        recordList = SpyNewRecord(0);

        if (NULL != recordList) {

            SpyLogIrp( Irp, recordList );

            //
            //  Since we are logging this operation, we want to
            //  call our completion routine.
            //

            IoCopyCurrentIrpStackLocationToNext( Irp );

            KeInitializeEvent( &waitEvent,
                               NotificationEvent,
                               FALSE );

            recordList->WaitEvent = &waitEvent;

            IoSetCompletionRoutine( Irp,
                                    SpyPassThroughCompletion,
                                    recordList,
                                    TRUE,
                                    TRUE,
                                    TRUE);
        } else {

            //
            //  We could not get a record to log with so get this driver out
            //  of the driver stack and get to the next driver as quickly as
            //  possible.
            //

            IoSkipCurrentIrpStackLocation( Irp );
        }

    } else {*/

        //
        //  We are not logging so get this driver out of the driver stack and
        //  get to the next driver as quickly as possible.
        //

        IoSkipCurrentIrpStackLocation( Irp );
//    }

    //
    //  Determine if we are syncing back to the dispatch routine.  We need to
    //  do this before calling down because the recordList entry could be free
    //  upon return.
    //

//    syncToDispatch = ((NULL != recordList) &&
//                      (FlagOn(recordList->Flags,RLFL_SYNC_TO_DISPATCH)));

    //
    //  Now call the next file system driver with the request.
    //

    status = IoCallDriver( ((PFILESPY_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->NLExtHeader.AttachedToDeviceObject,
                            Irp );

    //
    //  If we are logging and we need to synchronize back to our dispatch
    //  routine for completion processing, do it now.
    //

/*    if (syncToDispatch) {

        //
        //  We are syncing back to the dispatch routine, wait for the operation
        //  to complete.
        //

        if (STATUS_PENDING == status) {

            status = KeWaitForSingleObject( &waitEvent,
                                            Executive,
                                            KernelMode,
                                            FALSE,
                                            NULL );

            ASSERT(STATUS_SUCCESS == status);
        }

        //
        //  Verify the completion has actually been run
        //

        ASSERT(KeReadStateEvent(&waitEvent) ||
               !NT_SUCCESS(Irp->IoStatus.Status));

        //
        //  Do completion processing
        //

        SpyLogIrpCompletion( Irp, recordList );

        //
        //  Continue processing the operation
        //

        status = Irp->IoStatus.Status;

        IoCompleteRequest( Irp, IO_NO_INCREMENT );
    }*/

    return status;
}

NTSTATUS
SpyPassThroughCompletion (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PVOID Context
)
/*++

Routine Description:

    This routine is the completion routine SpyPassThrough.  This is used
    to log the information that can only be gathered after the I/O request
    has been completed.

    Once we are done logging all the information we care about, we append
    the record to the gOutputBufferList to be returned to the user.

    Note: This routine will only be set if we were trying to log the
        specified device when the Irp originated and we were able to
        allocate a record to store this logging information.

Arguments:

    DeviceObject - Pointer to device object Filespy attached to the file system
        filter stack for the volume receiving this I/O request.

    Irp - Pointer to the request packet representing the I/O request.

    Context - Pointer to the RECORD_LIST structure in which we store the
        information we are logging.

Return Value:

    The function value is the status of the operation.

--*/
{
//    PRECORD_LIST recordList = (PRECORD_LIST)Context;

    ASSERT(IS_FILESPY_DEVICE_OBJECT( DeviceObject ));
    UNREFERENCED_PARAMETER( DeviceObject );
    UNREFERENCED_PARAMETER( Context );

    //
    //  If the specified debug level is set, output what operation
    //  we are seeing to the debugger.
    //

//    if (FlagOn( gFileSpyDebugLevel, SPYDEBUG_TRACE_IRP_OPS )) {

//        SpyDumpIrpOperation( FALSE, Irp );
//    }

    //
    //  If we are to SYNC back to the dispatch routine, signal the event
    //  and return
    //

/*    if (FlagOn(recordList->Flags,RLFL_SYNC_TO_DISPATCH)) {

        KeSetEvent( recordList->WaitEvent, IO_NO_INCREMENT, FALSE );

        //
        //  When syncing back to the dispatch routine do not propagate the
        //  IRP_PENDING flag.
        //

        return STATUS_MORE_PROCESSING_REQUIRED;
    }

    //
    //  Do completion log processing
    //

    SpyLogIrpCompletion( Irp, recordList );*/

    //
    //  Propagate the IRP pending flag.
    //

    if (Irp->PendingReturned) {

        IoMarkIrpPending( Irp );
    }

    return STATUS_SUCCESS;
}

NTSTATUS
SpyDispatch (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
)
/*++

Routine Description:

    This function completes all requests on the gControlDeviceObject
    (FileSpy's device object) and passes all other requests on to the
    SpyPassThrough function.

Arguments:

    DeviceObject - Pointer to device object Filespy attached to the file system
        filter stack for the volume receiving this I/O request.

    Irp - Pointer to the request packet representing the I/O request.

Return Value:

    If this is a request on the gControlDeviceObject, STATUS_SUCCESS
    will be returned unless the device is already attached.  In that case,
    STATUS_DEVICE_ALREADY_ATTACHED is returned.

    If this is a request on a device other than the gControlDeviceObject,
    the function will return the value of SpyPassThrough().

--*/
{
    NTSTATUS status = STATUS_SUCCESS;
    PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation( Irp );

    //
    //  File systems should NEVER receive power IRPs
    //

    ASSERT(irpStack->MajorFunction != IRP_MJ_POWER);

    if (DeviceObject == gControlDeviceObject) {

        //
        //  If the specified debug level is set, output what operation
        //  we are seeing to the debugger.
        //

//        if (FlagOn( gFileSpyDebugLevel, SPYDEBUG_TRACE_IRP_OPS )) {

//            SpyDumpIrpOperation( TRUE, Irp );
//        }

        //
        //  A request is being made on our control device object
        //

        Irp->IoStatus.Information = 0;


        switch (irpStack->MajorFunction) {

            case IRP_MJ_DEVICE_CONTROL:

                //
                //  This is a private device control IRP for our control device.
                //  Pass the parameter information along to the common routine
                //  use to service these requests.
                //
                //  All of FileSpy's IOCTLs are buffered, therefore both the
                //  input and output buffer are represented by the
                //  Irp->AssociatedIrp.SystemBuffer.
                //

                status = SpyCommonDeviceIoControl( Irp->AssociatedIrp.SystemBuffer,
                         irpStack->Parameters.DeviceIoControl.InputBufferLength,
                         Irp->AssociatedIrp.SystemBuffer,
                         irpStack->Parameters.DeviceIoControl.OutputBufferLength,
                         irpStack->Parameters.DeviceIoControl.IoControlCode,
                         &Irp->IoStatus );
                break;

            case IRP_MJ_CLEANUP:

                //
                //  This is the cleanup that we will see when all references
                //  to a handle opened to FileSpy's control device object are
                //  cleaned up.  We don't have to do anything here since we
                //  wait until the actual IRP_MJ_CLOSE to clean up the name
                //  cache.  Just complete the IRP successfully.
                //

                status = STATUS_SUCCESS;

                break;

            default:

                status = STATUS_INVALID_DEVICE_REQUEST;
        }

        Irp->IoStatus.Status = status;

        //
        //  We have completed all processing for this IRP, so tell the
        //  I/O Manager.  This IRP will not be passed any further down
        //  the stack since no drivers below FileSpy care about this
        //  I/O operation that was directed to FileSpy.
        //

        IoCompleteRequest( Irp, IO_NO_INCREMENT );
        return status;
    }

    return SpyPassThrough( DeviceObject, Irp );
}

NTSTATUS
SpyCreate (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
)
/*++

Routine Description:

    This is the routine that is associated with IRP_MJ_CREATE IRP.  If the
    DeviceObject is the ControlDevice, we do the creation work for the
    ControlDevice and complete the IRP.  Otherwise, we pass through
    this IRP for another device to complete.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜久久久| 久久电影网站中文字幕| 婷婷六月综合网| 国内成人精品2018免费看| 91原创在线视频| 大陆成人av片| 视频一区视频二区在线观看| 成人欧美一区二区三区白人 | 久久久99精品免费观看| 日韩欧美一区二区免费| 中文字幕亚洲视频| 日韩女优电影在线观看| 中文字幕一区二区三区不卡在线| 九一久久久久久| 亚洲三级久久久| 欧美日韩一级视频| 不卡欧美aaaaa| 91高清视频在线| 欧美视频一区二| 日韩三级电影网址| 日韩欧美综合一区| 国产精品高清亚洲| 久草热8精品视频在线观看| 麻豆一区二区三| 99久久免费精品| 精品欧美一区二区三区精品久久 | 亚洲精品国产一区二区三区四区在线| 久久―日本道色综合久久| 99精品视频在线观看免费| 色诱视频网站一区| 精品美女在线观看| 亚洲色大成网站www久久九九| 亚洲大型综合色站| 国产美女娇喘av呻吟久久| 不卡电影一区二区三区| 欧美日韩免费高清一区色橹橹| 欧美不卡一二三| 亚洲电影激情视频网站| 成人精品一区二区三区中文字幕| 欧美日韩一区高清| 国产精品传媒视频| 国产一区999| 精品欧美一区二区在线观看 | 成人免费在线视频| 中文字幕精品一区二区精品绿巨人| 青青草国产成人99久久| 一本大道av伊人久久综合| 国产欧美综合在线观看第十页 | 在线观看日产精品| 91成人在线观看喷潮| 99vv1com这只有精品| 一本久久a久久精品亚洲| av高清不卡在线| 91福利在线观看| 在线看不卡av| 欧美性xxxxxxxx| 欧美成人三级电影在线| 欧美成人福利视频| 中国色在线观看另类| 亚洲欧美色一区| 国产制服丝袜一区| 亚洲麻豆国产自偷在线| 色天使色偷偷av一区二区| 热久久免费视频| 国产精品久久久久久久久果冻传媒| 99精品在线观看视频| eeuss国产一区二区三区| 丝袜诱惑亚洲看片| 亚洲一区日韩精品中文字幕| 国产suv一区二区三区88区| 9191国产精品| 亚洲精品中文在线影院| 成人一区二区三区视频| 精品福利一二区| 久久国产精品一区二区| 国产精品66部| 国产在线一区观看| 成人免费看片app下载| 国产成人一级电影| 国产aⅴ精品一区二区三区色成熟| 日韩在线观看一区二区| 久久久青草青青国产亚洲免观| 欧美日韩不卡视频| 欧美日韩一本到| 在线综合+亚洲+欧美中文字幕| 欧美久久久久久蜜桃| 91精品国产免费久久综合| 精品视频在线视频| 一区二区三区四区激情| 欧洲视频一区二区| 亚洲超碰97人人做人人爱| 91精品综合久久久久久| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美系列日韩一区| 亚洲成人第一页| 欧美一卡二卡三卡四卡| 国产麻豆一精品一av一免费| 久久久影院官网| 99精品热视频| 日韩中文字幕麻豆| 精品国产乱码久久久久久久久 | 91精品国产入口在线| 久久成人免费网站| 亚洲国产精品二十页| 色综合久久88色综合天天| 奇米色777欧美一区二区| 日日摸夜夜添夜夜添亚洲女人| 91在线观看一区二区| 亚洲午夜一二三区视频| 日韩欧美在线1卡| 成人黄色a**站在线观看| 亚洲综合999| 精品福利在线导航| 色综合久久天天综合网| 日本va欧美va瓶| 中文字幕的久久| 日本高清不卡在线观看| 久久99精品一区二区三区三区| 国产精品久久久久影视| 制服.丝袜.亚洲.中文.综合| 国产成人一区在线| 免费的成人av| 亚洲精品亚洲人成人网| 久久久久国产一区二区三区四区 | 日产国产高清一区二区三区| 久久精品欧美日韩| 欧美精品精品一区| 99这里都是精品| 久久99精品国产| 亚洲成人一区在线| 国产精品久久久久久久岛一牛影视 | 国产一区二区三区高清播放| 亚洲一区二区三区四区五区黄| 亚洲欧洲美洲综合色网| 国产v日产∨综合v精品视频| 久久精品国产亚洲aⅴ| 亚洲精品乱码久久久久久黑人| 26uuu久久综合| 日韩一区二区电影| 7777精品伊人久久久大香线蕉完整版| 丁香另类激情小说| 国产精品系列在线播放| 轻轻草成人在线| 亚洲国产美国国产综合一区二区| 国产精品免费看片| 久久免费美女视频| 精品国产一区二区三区久久影院 | 欧美精品aⅴ在线视频| 一本到三区不卡视频| aaa欧美日韩| www.色精品| k8久久久一区二区三区| 懂色av噜噜一区二区三区av| 国产一区二区在线影院| 国产综合久久久久影院| 精品一区二区三区av| 精品中文字幕一区二区| 国产在线精品一区二区| 国产一区91精品张津瑜| 国产一区二区三区最好精华液| 久久99日本精品| 激情小说亚洲一区| 国产99久久久国产精品免费看| 国产精品资源在线看| 高清国产一区二区| 成人av动漫网站| 91黄色小视频| 91视频免费观看| 色综合久久天天综合网| 色综合久久天天| 欧美妇女性影城| 日韩欧美国产三级电影视频| 日韩欧美第一区| 久久精品欧美日韩精品| 亚洲视频一区二区免费在线观看| 亚洲免费av在线| 天天操天天色综合| 国内精品在线播放| 成人黄色小视频在线观看| 91美女福利视频| 91精品国产综合久久婷婷香蕉| 精品嫩草影院久久| 国产精品网站在线观看| 一区二区三区在线观看网站| 日韩和欧美一区二区三区| 国产精品一区在线观看乱码| 色综合色综合色综合| 欧美一区二区三区思思人| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 美女脱光内衣内裤视频久久网站| 国产一区二区女| 91极品视觉盛宴| 久久久精品天堂| 亚洲一线二线三线视频| 国产一区二区三区av电影 | 免费三级欧美电影| 成人sese在线| 欧美不卡123| 亚洲一级不卡视频| 国产精品18久久久久久久久|